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-all mailing list