svn commit: r307705 - in head/sys: amd64/amd64 i386/i386
Jung-uk Kim
jkim at FreeBSD.org
Fri Oct 21 06:09:31 UTC 2016
Author: jkim
Date: Fri Oct 21 06:09:30 2016
New Revision: 307705
URL: https://svnweb.freebsd.org/changeset/base/307705
Log:
Redude code for conditional jumps.
Modified:
head/sys/amd64/amd64/bpf_jit_machdep.c
head/sys/i386/i386/bpf_jit_machdep.c
Modified: head/sys/amd64/amd64/bpf_jit_machdep.c
==============================================================================
--- head/sys/amd64/amd64/bpf_jit_machdep.c Fri Oct 21 06:06:54 2016 (r307704)
+++ head/sys/amd64/amd64/bpf_jit_machdep.c Fri Oct 21 06:09:30 2016 (r307705)
@@ -425,75 +425,58 @@ bpf_jit_compile(struct bpf_insn *prog, u
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:
Modified: head/sys/i386/i386/bpf_jit_machdep.c
==============================================================================
--- head/sys/i386/i386/bpf_jit_machdep.c Fri Oct 21 06:06:54 2016 (r307704)
+++ head/sys/i386/i386/bpf_jit_machdep.c Fri Oct 21 06:09:30 2016 (r307705)
@@ -446,75 +446,58 @@ bpf_jit_compile(struct bpf_insn *prog, u
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:
More information about the svn-src-head
mailing list