diff options
author | Jung-uk Kim <jkim@FreeBSD.org> | 2005-12-06 06:45:39 +0000 |
---|---|---|
committer | Jung-uk Kim <jkim@FreeBSD.org> | 2005-12-06 06:45:39 +0000 |
commit | 23a8fc28c2825d87cf7b8d08a8207241cb0659ba (patch) | |
tree | 85f5aacc8df917bf0c3b9dc7a02ab1e02cbe4d23 /sys/amd64 | |
parent | 9da8a32aaef3c8360d18152fbd86e29d95b3ae48 (diff) | |
download | src-23a8fc28c2825d87cf7b8d08a8207241cb0659ba.tar.gz src-23a8fc28c2825d87cf7b8d08a8207241cb0659ba.zip |
- Micro-optimize `mov $0, %edx' -> `xor %edx, %edx'.
- Correct amd64 macro style (no functional change).
Notes
Notes:
svn path=/head/; revision=153156
Diffstat (limited to 'sys/amd64')
-rw-r--r-- | sys/amd64/amd64/bpf_jit_machdep.c | 6 | ||||
-rw-r--r-- | sys/amd64/amd64/bpf_jit_machdep.h | 42 |
2 files changed, 27 insertions, 21 deletions
diff --git a/sys/amd64/amd64/bpf_jit_machdep.c b/sys/amd64/amd64/bpf_jit_machdep.c index 2f9dd210957f..bc38abe2a7b0 100644 --- a/sys/amd64/amd64/bpf_jit_machdep.c +++ b/sys/amd64/amd64/bpf_jit_machdep.c @@ -242,7 +242,7 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem) ZERO_EAX(); POP(RBX); LEAVE_RET(); - MOVid(EDX, 0); + ZERO_EDX(); MOVobb(DL, RBX, RCX); ANDib(DL, 0xf); SHLib(EDX, 2); @@ -378,7 +378,7 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem) POP(RBX); LEAVE_RET(); MOVrd(ECX, EDX); - MOVid(EDX, 0); + ZERO_EDX(); DIVrd(ECX); MOVrd(EDX, ECX); break; @@ -418,7 +418,7 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem) case BPF_ALU|BPF_DIV|BPF_K: MOVrd(ECX, EDX); - MOVid(EDX, 0); + ZERO_EDX(); MOVid(ESI, ins->k); DIVrd(ESI); MOVrd(EDX, ECX); diff --git a/sys/amd64/amd64/bpf_jit_machdep.h b/sys/amd64/amd64/bpf_jit_machdep.h index 028d9612df54..dab247724130 100644 --- a/sys/amd64/amd64/bpf_jit_machdep.h +++ b/sys/amd64/amd64/bpf_jit_machdep.h @@ -133,11 +133,11 @@ typedef void (*emit_func)(bpf_bin_stream *stream, u_int value, u_int n); (3 << 6) | ((dr64 & 0x7) << 3) | (sr64 & 0x7), 1); \ } while (0) -/* mov dr32,sr32[off] */ -#define MOVodd(dr32, sr32, off) do { \ +/* mov dr32,sr64[off] */ +#define MOVodd(dr32, sr64, off) do { \ emitm(&stream, (8 << 4) | 3 | (1 << 3), 1); \ emitm(&stream, \ - (1 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \ + (1 << 6) | ((dr32 & 0x7) << 3) | (sr64 & 0x7), 1); \ emitm(&stream, off, 1); \ } while (0) @@ -149,33 +149,33 @@ typedef void (*emit_func)(bpf_bin_stream *stream, u_int value, u_int n); emitm(&stream, off, 1); \ } while (0) -/* mov dr32,sr32[or32] */ -#define MOVobd(dr32, sr32, or32) do { \ +/* mov dr32,sr64[or64] */ +#define MOVobd(dr32, sr64, or64) do { \ emitm(&stream, (8 << 4) | 3 | (1 << 3), 1); \ emitm(&stream, ((dr32 & 0x7) << 3) | 4, 1); \ - emitm(&stream, ((or32 & 0x7) << 3) | (sr32 & 0x7), 1); \ + emitm(&stream, ((or64 & 0x7) << 3) | (sr64 & 0x7), 1); \ } while (0) -/* mov dr16,sr32[or32] */ -#define MOVobw(dr32, sr32, or32) do { \ +/* mov dr16,sr64[or64] */ +#define MOVobw(dr32, sr64, or64) do { \ emitm(&stream, 0x66, 1); \ emitm(&stream, (8 << 4) | 3 | (1 << 3), 1); \ emitm(&stream, ((dr32 & 0x7) << 3) | 4, 1); \ - emitm(&stream, ((or32 & 0x7) << 3) | (sr32 & 0x7), 1); \ + emitm(&stream, ((or64 & 0x7) << 3) | (sr64 & 0x7), 1); \ } while (0) -/* mov dr8,sr32[or32] */ -#define MOVobb(dr8, sr32, or32) do { \ +/* mov dr8,sr64[or64] */ +#define MOVobb(dr8, sr64, or64) do { \ emitm(&stream, 0x8a, 1); \ emitm(&stream, ((dr8 & 0x7) << 3) | 4, 1); \ - emitm(&stream, ((or32 & 0x7) << 3) | (sr32 & 0x7), 1); \ + emitm(&stream, ((or64 & 0x7) << 3) | (sr64 & 0x7), 1); \ } while (0) -/* mov [dr32][or32],sr32 */ -#define MOVomd(dr32, or32, sr32) do { \ +/* mov [dr64][or64],sr32 */ +#define MOVomd(dr64, or64, sr32) do { \ emitm(&stream, 0x89, 1); \ emitm(&stream, ((sr32 & 0x7) << 3) | 4, 1); \ - emitm(&stream, ((or32 & 0x7) << 3) | (dr32 & 0x7), 1); \ + emitm(&stream, ((or64 & 0x7) << 3) | (dr64 & 0x7), 1); \ } while (0) /* bswap dr32 */ @@ -335,11 +335,11 @@ typedef void (*emit_func)(bpf_bin_stream *stream, u_int value, u_int n); emitm(&stream, (27 << 3) | (r32 & 0x7), 1); \ } while (0) -/* cmp dr32,sr32[off] */ -#define CMPodd(dr32, sr32, off) do { \ +/* cmp dr32,sr64[off] */ +#define CMPodd(dr32, sr64, off) do { \ emitm(&stream, (3 << 4) | 3 | (1 << 3), 1); \ emitm(&stream, \ - (1 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \ + (1 << 6) | ((dr32 & 0x7) << 3) | (sr64 & 0x7), 1); \ emitm(&stream, off, 1); \ } while (0) @@ -428,4 +428,10 @@ typedef void (*emit_func)(bpf_bin_stream *stream, u_int value, u_int n); emitm(&stream, 0xc0, 1); \ } while (0) +/* xor edx,edx */ +#define ZERO_EDX() do { \ + emitm(&stream, 0x31, 1); \ + emitm(&stream, 0xc9, 1); \ +} while (0) + #endif /* _BPF_JIT_MACHDEP_H_ */ |