Module Name:    src
Committed By:   alnsn
Date:           Tue Jul 22 08:29:51 UTC 2014

Modified Files:
        src/sys/net: bpfjit.c

Log Message:
Two tweaks: don't use a temporary register to dereference the err agrument
after xcall and don't generate ((tmp1 & 0xf) << 2) twice in emit_msh().


To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/sys/net/bpfjit.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/net/bpfjit.c
diff -u src/sys/net/bpfjit.c:1.29 src/sys/net/bpfjit.c:1.30
--- src/sys/net/bpfjit.c:1.29	Tue Jul 22 08:20:08 2014
+++ src/sys/net/bpfjit.c	Tue Jul 22 08:29:51 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: bpfjit.c,v 1.29 2014/07/22 08:20:08 alnsn Exp $	*/
+/*	$NetBSD: bpfjit.c,v 1.30 2014/07/22 08:29:51 alnsn Exp $	*/
 
 /*-
  * Copyright (c) 2011-2014 Alexander Nasonov.
@@ -31,9 +31,9 @@
 
 #include <sys/cdefs.h>
 #ifdef _KERNEL
-__KERNEL_RCSID(0, "$NetBSD: bpfjit.c,v 1.29 2014/07/22 08:20:08 alnsn Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bpfjit.c,v 1.30 2014/07/22 08:29:51 alnsn Exp $");
 #else
-__RCSID("$NetBSD: bpfjit.c,v 1.29 2014/07/22 08:20:08 alnsn Exp $");
+__RCSID("$NetBSD: bpfjit.c,v 1.30 2014/07/22 08:29:51 alnsn Exp $");
 #endif
 
 #include <sys/types.h>
@@ -612,19 +612,11 @@ emit_xcall(struct sljit_compiler *compil
 			return status;
 	}
 
-	/* tmp2 = *err; */
-	status = sljit_emit_op1(compiler,
-	    SLJIT_MOV_UI,
-	    BJ_TMP2REG, 0,
-	    SLJIT_MEM1(SLJIT_LOCALS_REG),
-	    offsetof(struct bpfjit_stack, err));
-	if (status != SLJIT_SUCCESS)
-		return status;
-
-	/* if (tmp2 != 0) return 0; */
+	/* if (*err != 0) return 0; */
 	jump = sljit_emit_cmp(compiler,
-	    SLJIT_C_NOT_EQUAL,
-	    BJ_TMP2REG, 0,
+	    SLJIT_C_NOT_EQUAL|SLJIT_INT_OP,
+	    SLJIT_MEM1(SLJIT_LOCALS_REG),
+	    offsetof(struct bpfjit_stack, err),
 	    SLJIT_IMM, 0);
 	if (jump == NULL)
 		return SLJIT_ERR_ALLOC_FAILED;
@@ -989,24 +981,6 @@ emit_msh(struct sljit_compiler *compiler
 	if (status != SLJIT_SUCCESS)
 		return status;
 
-	/* tmp1 &= 0xf */
-	status = sljit_emit_op2(compiler,
-	    SLJIT_AND,
-	    BJ_TMP1REG, 0,
-	    BJ_TMP1REG, 0,
-	    SLJIT_IMM, 0xf);
-	if (status != SLJIT_SUCCESS)
-		return status;
-
-	/* tmp1 = tmp1 << 2 */
-	status = sljit_emit_op2(compiler,
-	    SLJIT_SHL,
-	    BJ_XREG, 0,
-	    BJ_TMP1REG, 0,
-	    SLJIT_IMM, 2);
-	if (status != SLJIT_SUCCESS)
-		return status;
-
 #ifdef _KERNEL
 	over_mchain_jump = sljit_emit_jump(compiler, SLJIT_JUMP);
 	if (over_mchain_jump == NULL)
@@ -1035,6 +1009,12 @@ emit_msh(struct sljit_compiler *compiler
 	if (status != SLJIT_SUCCESS)
 		return status;
 
+	label = sljit_emit_label(compiler);
+	if (label == NULL)
+		return SLJIT_ERR_ALLOC_FAILED;
+	sljit_set_label(over_mchain_jump, label);
+#endif
+
 	/* tmp1 &= 0xf */
 	status = sljit_emit_op2(compiler,
 	    SLJIT_AND,
@@ -1044,7 +1024,7 @@ emit_msh(struct sljit_compiler *compiler
 	if (status != SLJIT_SUCCESS)
 		return status;
 
-	/* tmp1 = tmp1 << 2 */
+	/* X = tmp1 << 2 */
 	status = sljit_emit_op2(compiler,
 	    SLJIT_SHL,
 	    BJ_XREG, 0,
@@ -1053,13 +1033,6 @@ emit_msh(struct sljit_compiler *compiler
 	if (status != SLJIT_SUCCESS)
 		return status;
 
-
-	label = sljit_emit_label(compiler);
-	if (label == NULL)
-		return SLJIT_ERR_ALLOC_FAILED;
-	sljit_set_label(over_mchain_jump, label);
-#endif
-
 	return SLJIT_SUCCESS;
 }
 
@@ -2107,8 +2080,8 @@ bpfjit_generate_code(const bpf_ctx_t *bc
 	sljit_compiler_verbose(compiler, stderr);
 #endif
 
-	status = sljit_emit_enter(compiler, 2, nscratches(hints),
-	    nsaveds(hints), sizeof(struct bpfjit_stack));
+	status = sljit_emit_enter(compiler,
+	    2, nscratches(hints), nsaveds(hints), sizeof(struct bpfjit_stack));
 	if (status != SLJIT_SUCCESS)
 		goto fail;
 

Reply via email to