diff options
| author | Jung-uk Kim <jkim@FreeBSD.org> | 2016-10-21 06:09:30 +0000 |
|---|---|---|
| committer | Jung-uk Kim <jkim@FreeBSD.org> | 2016-10-21 06:09:30 +0000 |
| commit | 730b3be34f0872e3a6a506b84d187856c03bc200 (patch) | |
| tree | 282e580db423331af6c6bc7f0366a8d9a4138ef8 /sys | |
| parent | 99e3ae6839808dba47459496536fb1c0a5305283 (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/amd64/amd64/bpf_jit_machdep.c | 83 | ||||
| -rw-r--r-- | sys/i386/i386/bpf_jit_machdep.c | 83 |
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: |
