aboutsummaryrefslogtreecommitdiff
path: root/sys/amd64
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2005-12-06 06:45:39 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2005-12-06 06:45:39 +0000
commit23a8fc28c2825d87cf7b8d08a8207241cb0659ba (patch)
tree85f5aacc8df917bf0c3b9dc7a02ab1e02cbe4d23 /sys/amd64
parent9da8a32aaef3c8360d18152fbd86e29d95b3ae48 (diff)
downloadsrc-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.c6
-rw-r--r--sys/amd64/amd64/bpf_jit_machdep.h42
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_ */