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: _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"