Skip to content

Commit

Permalink
vm: simplify use of offset
Browse files Browse the repository at this point in the history
  • Loading branch information
0x0ece committed Dec 9, 2024
1 parent 524db51 commit 30cea20
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 39 deletions.
72 changes: 36 additions & 36 deletions src/flamenco/vm/fd_vm_interp_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@
ulong opcode;
ulong dst;
ulong src;
short offset;
ulong offset; /* offset is 16-bit but always sign extended, so we handle cast once */
uint imm;
ulong reg_dst;
ulong reg_src;
Expand Down Expand Up @@ -312,7 +312,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x05) /* FD_SBPF_OP_JA */
pc += (ulong)(long)offset;
pc += offset;
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x07) /* FD_SBPF_OP_ADD64_IMM */
Expand Down Expand Up @@ -342,7 +342,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x15) /* FD_SBPF_OP_JEQ_IMM */
pc += fd_ulong_if( reg_dst==(ulong)(long)(int)imm, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( reg_dst==(ulong)(long)(int)imm, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x17) /* FD_SBPF_OP_SUB64_IMM */
Expand Down Expand Up @@ -370,7 +370,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x1d) /* FD_SBPF_OP_JEQ_REG */
pc += fd_ulong_if( reg_dst==reg_src, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( reg_dst==reg_src, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x1f) /* FD_SBPF_OP_SUB64_REG */
Expand All @@ -384,12 +384,12 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x25) /* FD_SBPF_OP_JGT_IMM */
pc += fd_ulong_if( reg_dst>(ulong)(long)(int)imm, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( reg_dst>(ulong)(long)(int)imm, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x27) { /* FD_SBPF_OP_STB */
uchar is_multi_region = 0;
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong vaddr = reg_dst + offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(uchar), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
if( FD_UNLIKELY( !haddr ) ) { vm->segv_store_vaddr = vaddr; goto sigsegv; } /* Note: untaken branches don't consume BTB */
fd_vm_mem_st_1( haddr, (uchar)imm );
Expand All @@ -398,20 +398,20 @@

FD_VM_INTERP_INSTR_BEGIN(0x2c) { /* FD_SBPF_OP_LDXB */
uchar is_multi_region = 0;
ulong vaddr = reg_src + (ulong)(long)offset;
ulong vaddr = reg_src + offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(uchar), region_haddr, region_ld_sz, 0, 0UL, &is_multi_region );
if( FD_UNLIKELY( !haddr ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */
reg[ dst ] = fd_vm_mem_ld_1( haddr );
}
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x2d) /* FD_SBPF_OP_JGT_REG */
pc += fd_ulong_if( reg_dst>reg_src, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( reg_dst>reg_src, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x2f) { /* FD_SBPF_OP_STXB */
uchar is_multi_region = 0;
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong vaddr = reg_dst + offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(uchar), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
if( FD_UNLIKELY( !haddr ) ) { vm->segv_store_vaddr = vaddr; goto sigsegv; } /* Note: untaken branches don't consume BTB */ /* FIXME: sigrdonly */
fd_vm_mem_st_1( haddr, (uchar)reg_src );
Expand Down Expand Up @@ -439,7 +439,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x35) /* FD_SBPF_OP_JGE_IMM */
pc += fd_ulong_if( reg_dst>=(ulong)(long)(int)imm, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( reg_dst>=(ulong)(long)(int)imm, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x36) /* FD_SBPF_OP_UHMUL64_IMM */
Expand All @@ -448,7 +448,7 @@

FD_VM_INTERP_INSTR_BEGIN(0x37) { /* FD_SBPF_OP_STH */
uchar is_multi_region = 0;
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong vaddr = reg_dst + offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(ushort), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
int sigsegv = !haddr;
if( FD_UNLIKELY( sigsegv ) ) { vm->segv_store_vaddr = vaddr; goto sigsegv; } /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
Expand All @@ -458,7 +458,7 @@

FD_VM_INTERP_INSTR_BEGIN(0x3c) { /* FD_SBPF_OP_LDXH */
uchar is_multi_region = 0;
ulong vaddr = reg_src + (ulong)(long)offset;
ulong vaddr = reg_src + offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(ushort), region_haddr, region_ld_sz, 0, 0UL, &is_multi_region );
int sigsegv = !haddr;
if( FD_UNLIKELY( sigsegv ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
Expand All @@ -467,12 +467,12 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x3d) /* FD_SBPF_OP_JGE_REG */
pc += fd_ulong_if( reg_dst>=reg_src, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( reg_dst>=reg_src, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x3f) { /* FD_SBPF_OP_STXH */
uchar is_multi_region = 0;
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong vaddr = reg_dst + offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(ushort), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
int sigsegv = !haddr;
if( FD_UNLIKELY( sigsegv ) ) { vm->segv_store_vaddr = vaddr; goto sigsegv; } /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus/rdonly */
Expand Down Expand Up @@ -505,7 +505,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x45) /* FD_SBPF_OP_JSET_IMM */
pc += fd_ulong_if( !!(reg_dst & (ulong)(long)(int)imm), (ulong)(long)offset, 0UL );
pc += fd_ulong_if( !!(reg_dst & (ulong)(long)(int)imm), offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x46) /* FD_SBPF_OP_UDIV32_IMM */
Expand All @@ -521,7 +521,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x4d) /* FD_SBPF_OP_JSET_REG */
pc += fd_ulong_if( !!(reg_dst & reg_src), (ulong)(long)offset, 0UL );
pc += fd_ulong_if( !!(reg_dst & reg_src), offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x4e) /* FD_SBPF_OP_UDIV32_REG */
Expand All @@ -540,7 +540,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x55) /* FD_SBPF_OP_JNE_IMM */
pc += fd_ulong_if( reg_dst!=(ulong)(long)(int)imm, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( reg_dst!=(ulong)(long)(int)imm, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x56) /* FD_SBPF_OP_UDIV64_IMM */
Expand All @@ -556,7 +556,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x5d) /* FD_SBPF_OP_JNE_REG */
pc += fd_ulong_if( reg_dst!=reg_src, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( reg_dst!=reg_src, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x5e) /* FD_SBPF_OP_UDIV64_REG */
Expand All @@ -580,7 +580,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x65) /* FD_SBPF_OP_JSGT_IMM */
pc += fd_ulong_if( (long)reg_dst>(long)(int)imm, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( (long)reg_dst>(long)(int)imm, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x66) /* FD_SBPF_OP_UREM32_IMM */
Expand All @@ -598,7 +598,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x6d) /* FD_SBPF_OP_JSGT_REG */
pc += fd_ulong_if( (long)reg_dst>(long)reg_src, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( (long)reg_dst>(long)reg_src, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x6e) /* FD_SBPF_OP_UREM32_REG */
Expand All @@ -619,7 +619,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x75) /* FD_SBPF_OP_JSGE_IMM */
pc += fd_ulong_if( (long)reg_dst>=(long)(int)imm, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( (long)reg_dst>=(long)(int)imm, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x76) /* FD_SBPF_OP_UREM64_IMM */
Expand All @@ -637,7 +637,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0x7d) /* FD_SBPF_OP_JSGE_REG */
pc += fd_ulong_if( (long)reg_dst>=(long)reg_src, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( (long)reg_dst>=(long)reg_src, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0x7e) /* FD_SBPF_OP_UREM64_REG */
Expand Down Expand Up @@ -782,7 +782,7 @@

FD_VM_INTERP_INSTR_BEGIN(0x87) { /* FD_SBPF_OP_STW */
uchar is_multi_region = 0;
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong vaddr = reg_dst + offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(uint), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
int sigsegv = !haddr;
if( FD_UNLIKELY( sigsegv ) ) { vm->segv_store_vaddr = vaddr; goto sigsegv; } /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
Expand All @@ -795,7 +795,7 @@

FD_VM_INTERP_INSTR_BEGIN(0x8c) { /* FD_SBPF_OP_LDXW */
uchar is_multi_region = 0;
ulong vaddr = reg_src + (ulong)(long)offset;
ulong vaddr = reg_src + offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(uint), region_haddr, region_ld_sz, 0, 0UL, &is_multi_region );
int sigsegv = !haddr;
if( FD_UNLIKELY( sigsegv ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
Expand Down Expand Up @@ -847,7 +847,7 @@

FD_VM_INTERP_INSTR_BEGIN(0x8f) { /* FD_SBPF_OP_STXW */
uchar is_multi_region = 0;
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong vaddr = reg_dst + offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(uint), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
int sigsegv = !haddr;
if( FD_UNLIKELY( sigsegv ) ) { vm->segv_store_vaddr = vaddr; goto sigsegv; } /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus/rdonly */
Expand Down Expand Up @@ -883,7 +883,7 @@

FD_VM_INTERP_INSTR_BEGIN(0x97) { /* FD_SBPF_OP_STQ */
uchar is_multi_region = 0;
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong vaddr = reg_dst + offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(ulong), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
int sigsegv = !haddr;
if( FD_UNLIKELY( sigsegv ) ) { vm->segv_store_vaddr = vaddr; goto sigsegv; } /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
Expand All @@ -893,7 +893,7 @@

FD_VM_INTERP_INSTR_BEGIN(0x9c) { /* FD_SBPF_OP_LDXQ */
uchar is_multi_region = 0;
ulong vaddr = reg_src + (ulong)(long)offset;
ulong vaddr = reg_src + offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(ulong), region_haddr, region_ld_sz, 0, 0UL, &is_multi_region );
int sigsegv = !haddr;
if( FD_UNLIKELY( sigsegv ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
Expand All @@ -907,7 +907,7 @@

FD_VM_INTERP_INSTR_BEGIN(0x9f) { /* FD_SBPF_OP_STXQ */
uchar is_multi_region = 0;
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong vaddr = reg_dst + offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(ulong), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
int sigsegv = !haddr;
if( FD_UNLIKELY( sigsegv ) ) { vm->segv_store_vaddr = vaddr; goto sigsegv; } /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus/rdonly */
Expand Down Expand Up @@ -936,7 +936,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0xa5) /* FD_SBPF_OP_JLT_IMM */
pc += fd_ulong_if( reg_dst<(ulong)(long)(int)imm, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( reg_dst<(ulong)(long)(int)imm, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0xa7) /* FD_SBPF_OP_XOR64_IMM */
Expand All @@ -948,7 +948,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0xad) /* FD_SBPF_OP_JLT_REG */
pc += fd_ulong_if( reg_dst<reg_src, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( reg_dst<reg_src, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0xaf) /* FD_SBPF_OP_XOR64_REG */
Expand All @@ -962,7 +962,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0xb5) /* FD_SBPF_OP_JLE_IMM */
pc += fd_ulong_if( reg_dst<=(ulong)(long)(int)imm, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( reg_dst<=(ulong)(long)(int)imm, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0xb6) /* FD_SBPF_OP_SHMUL64_IMM */
Expand All @@ -982,7 +982,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0xbd) /* FD_SBPF_OP_JLE_REG */
pc += fd_ulong_if( reg_dst<=reg_src, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( reg_dst<=reg_src, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0xbe) /* FD_SBPF_OP_SHMUL64_REG */
Expand All @@ -1000,7 +1000,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0xc5) /* FD_SBPF_OP_JSLT_IMM */ /* FIXME: CHECK IMM SIGN EXTENSION */
pc += fd_ulong_if( (long)reg_dst<(long)(int)imm, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( (long)reg_dst<(long)(int)imm, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0xc6) /* FD_SBPF_OP_SDIV32_IMM */
Expand All @@ -1017,7 +1017,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0xcd) /* FD_SBPF_OP_JSLT_REG */
pc += fd_ulong_if( (long)reg_dst<(long)reg_src, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( (long)reg_dst<(long)reg_src, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0xce) /* FD_SBPF_OP_SDIV32_REG */
Expand All @@ -1042,7 +1042,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0xd5) /* FD_SBPF_OP_JSLE_IMM */
pc += fd_ulong_if( (long)reg_dst<=(long)(int)imm, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( (long)reg_dst<=(long)(int)imm, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0xd6) /* FD_SBPF_OP_SDIV64_IMM */
Expand All @@ -1060,7 +1060,7 @@
FD_VM_INTERP_INSTR_END;

FD_VM_INTERP_BRANCH_BEGIN(0xdd) /* FD_SBPF_OP_JSLE_REG */
pc += fd_ulong_if( (long)reg_dst<=(long)reg_src, (ulong)(long)offset, 0UL );
pc += fd_ulong_if( (long)reg_dst<=(long)reg_src, offset, 0UL );
FD_VM_INTERP_BRANCH_END;

FD_VM_INTERP_INSTR_BEGIN(0xde) /* FD_SBPF_OP_SDIV64_REG */
Expand Down
2 changes: 1 addition & 1 deletion src/flamenco/vm/fd_vm_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ fd_vm_instr( ulong opcode, /* Assumed valid */
FD_FN_CONST static inline ulong fd_vm_instr_opcode( ulong instr ) { return instr & 255UL; } /* In [0,256) */
FD_FN_CONST static inline ulong fd_vm_instr_dst ( ulong instr ) { return ((instr>> 8) & 15UL); } /* In [0,16) */
FD_FN_CONST static inline ulong fd_vm_instr_src ( ulong instr ) { return ((instr>>12) & 15UL); } /* In [0,16) */
FD_FN_CONST static inline short fd_vm_instr_offset( ulong instr ) { return (short)(ushort)(instr>>16); }
FD_FN_CONST static inline ulong fd_vm_instr_offset( ulong instr ) { return (ulong)(long)(short)(ushort)(instr>>16); }
FD_FN_CONST static inline uint fd_vm_instr_imm ( ulong instr ) { return (uint)(instr>>32); }

FD_FN_CONST static inline ulong fd_vm_instr_opclass ( ulong instr ) { return instr & 7UL; } /* In [0,8) */
Expand Down
2 changes: 1 addition & 1 deletion src/flamenco/vm/jit/fd_jit_compiler.c
Original file line number Diff line number Diff line change
Expand Up @@ -724,7 +724,7 @@ fd_jit_compile( struct dasm_State ** Dst,
ulong opcode = fd_vm_instr_opcode( instr ); /* in [0,256) even if malformed */
ulong dst = fd_vm_instr_dst ( instr ); /* in [0, 16) even if malformed */
ulong src = fd_vm_instr_src ( instr ); /* in [0, 16) even if malformed */
short offset = fd_vm_instr_offset( instr ); /* in [-2^15,2^15) even if malformed */
ulong offset = fd_vm_instr_offset( instr ); /* in [-2^15,2^15) even if malformed */
uint imm = fd_vm_instr_imm ( instr ); /* in [0,2^32) even if malformed */

/* Macros for translating register accesses */
Expand Down
2 changes: 1 addition & 1 deletion src/flamenco/vm/jit/fd_jit_compiler.dasc
Original file line number Diff line number Diff line change
Expand Up @@ -565,7 +565,7 @@ fd_jit_compile( struct dasm_State ** Dst,
ulong opcode = fd_vm_instr_opcode( instr ); /* in [0,256) even if malformed */
ulong dst = fd_vm_instr_dst ( instr ); /* in [0, 16) even if malformed */
ulong src = fd_vm_instr_src ( instr ); /* in [0, 16) even if malformed */
short offset = fd_vm_instr_offset( instr ); /* in [-2^15,2^15) even if malformed */
ulong offset = fd_vm_instr_offset( instr ); /* in [-2^15,2^15) even if malformed */
uint imm = fd_vm_instr_imm ( instr ); /* in [0,2^32) even if malformed */

/* Macros for translating register accesses */
Expand Down

0 comments on commit 30cea20

Please sign in to comment.