aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2016-10-21 06:09:30 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2016-10-21 06:09:30 +0000
commit730b3be34f0872e3a6a506b84d187856c03bc200 (patch)
tree282e580db423331af6c6bc7f0366a8d9a4138ef8 /sys
parent99e3ae6839808dba47459496536fb1c0a5305283 (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/bpf_jit_machdep.c83
-rw-r--r--sys/i386/i386/bpf_jit_machdep.c83
2 files changed, 66 insertions, 100 deletions
diff --git a/sys/amd64/amd64/bpf_jit_machdep.c b/sys/amd64/amd64/bpf_jit_machdep.c
index 0cf4526a156a..01b898f84cf6 100644
--- a/sys/amd64/amd64/bpf_jit_machdep.c
+++ b/sys/amd64/amd64/bpf_jit_machdep.c
@@ -425,75 +425,58 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, size_t *size)
break;
case BPF_JMP|BPF_JGT|BPF_K:
+ case BPF_JMP|BPF_JGE|BPF_K:
+ case BPF_JMP|BPF_JEQ|BPF_K:
+ case BPF_JMP|BPF_JSET|BPF_K:
+ case BPF_JMP|BPF_JGT|BPF_X:
+ case BPF_JMP|BPF_JGE|BPF_X:
+ case BPF_JMP|BPF_JEQ|BPF_X:
+ case BPF_JMP|BPF_JSET|BPF_X:
if (ins->jt == ins->jf) {
JUMP(ins->jt);
break;
}
- CMPid(ins->k, EAX);
- JCC(JA, JBE);
- break;
+ switch (ins->code) {
+ case BPF_JMP|BPF_JGT|BPF_K:
+ CMPid(ins->k, EAX);
+ JCC(JA, JBE);
+ break;
- case BPF_JMP|BPF_JGE|BPF_K:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JGE|BPF_K:
+ CMPid(ins->k, EAX);
+ JCC(JAE, JB);
break;
- }
- CMPid(ins->k, EAX);
- JCC(JAE, JB);
- break;
- case BPF_JMP|BPF_JEQ|BPF_K:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JEQ|BPF_K:
+ CMPid(ins->k, EAX);
+ JCC(JE, JNE);
break;
- }
- CMPid(ins->k, EAX);
- JCC(JE, JNE);
- break;
- case BPF_JMP|BPF_JSET|BPF_K:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JSET|BPF_K:
+ TESTid(ins->k, EAX);
+ JCC(JNE, JE);
break;
- }
- TESTid(ins->k, EAX);
- JCC(JNE, JE);
- break;
- case BPF_JMP|BPF_JGT|BPF_X:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JGT|BPF_X:
+ CMPrd(EDX, EAX);
+ JCC(JA, JBE);
break;
- }
- CMPrd(EDX, EAX);
- JCC(JA, JBE);
- break;
- case BPF_JMP|BPF_JGE|BPF_X:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JGE|BPF_X:
+ CMPrd(EDX, EAX);
+ JCC(JAE, JB);
break;
- }
- CMPrd(EDX, EAX);
- JCC(JAE, JB);
- break;
- case BPF_JMP|BPF_JEQ|BPF_X:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JEQ|BPF_X:
+ CMPrd(EDX, EAX);
+ JCC(JE, JNE);
break;
- }
- CMPrd(EDX, EAX);
- JCC(JE, JNE);
- break;
- case BPF_JMP|BPF_JSET|BPF_X:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JSET|BPF_X:
+ TESTrd(EDX, EAX);
+ JCC(JNE, JE);
break;
}
- TESTrd(EDX, EAX);
- JCC(JNE, JE);
break;
case BPF_ALU|BPF_ADD|BPF_X:
diff --git a/sys/i386/i386/bpf_jit_machdep.c b/sys/i386/i386/bpf_jit_machdep.c
index c520113000c9..4c81c704b283 100644
--- a/sys/i386/i386/bpf_jit_machdep.c
+++ b/sys/i386/i386/bpf_jit_machdep.c
@@ -446,75 +446,58 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, size_t *size)
break;
case BPF_JMP|BPF_JGT|BPF_K:
+ case BPF_JMP|BPF_JGE|BPF_K:
+ case BPF_JMP|BPF_JEQ|BPF_K:
+ case BPF_JMP|BPF_JSET|BPF_K:
+ case BPF_JMP|BPF_JGT|BPF_X:
+ case BPF_JMP|BPF_JGE|BPF_X:
+ case BPF_JMP|BPF_JEQ|BPF_X:
+ case BPF_JMP|BPF_JSET|BPF_X:
if (ins->jt == ins->jf) {
JUMP(ins->jt);
break;
}
- CMPid(ins->k, EAX);
- JCC(JA, JBE);
- break;
+ switch (ins->code) {
+ case BPF_JMP|BPF_JGT|BPF_K:
+ CMPid(ins->k, EAX);
+ JCC(JA, JBE);
+ break;
- case BPF_JMP|BPF_JGE|BPF_K:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JGE|BPF_K:
+ CMPid(ins->k, EAX);
+ JCC(JAE, JB);
break;
- }
- CMPid(ins->k, EAX);
- JCC(JAE, JB);
- break;
- case BPF_JMP|BPF_JEQ|BPF_K:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JEQ|BPF_K:
+ CMPid(ins->k, EAX);
+ JCC(JE, JNE);
break;
- }
- CMPid(ins->k, EAX);
- JCC(JE, JNE);
- break;
- case BPF_JMP|BPF_JSET|BPF_K:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JSET|BPF_K:
+ TESTid(ins->k, EAX);
+ JCC(JNE, JE);
break;
- }
- TESTid(ins->k, EAX);
- JCC(JNE, JE);
- break;
- case BPF_JMP|BPF_JGT|BPF_X:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JGT|BPF_X:
+ CMPrd(EDX, EAX);
+ JCC(JA, JBE);
break;
- }
- CMPrd(EDX, EAX);
- JCC(JA, JBE);
- break;
- case BPF_JMP|BPF_JGE|BPF_X:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JGE|BPF_X:
+ CMPrd(EDX, EAX);
+ JCC(JAE, JB);
break;
- }
- CMPrd(EDX, EAX);
- JCC(JAE, JB);
- break;
- case BPF_JMP|BPF_JEQ|BPF_X:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JEQ|BPF_X:
+ CMPrd(EDX, EAX);
+ JCC(JE, JNE);
break;
- }
- CMPrd(EDX, EAX);
- JCC(JE, JNE);
- break;
- case BPF_JMP|BPF_JSET|BPF_X:
- if (ins->jt == ins->jf) {
- JUMP(ins->jt);
+ case BPF_JMP|BPF_JSET|BPF_X:
+ TESTrd(EDX, EAX);
+ JCC(JNE, JE);
break;
}
- TESTrd(EDX, EAX);
- JCC(JNE, JE);
break;
case BPF_ALU|BPF_ADD|BPF_X: