From owner-p4-projects@FreeBSD.ORG Mon Jun 30 01:51:58 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C051A1065673; Mon, 30 Jun 2008 01:51:57 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 81C341065671 for ; Mon, 30 Jun 2008 01:51:57 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 6EBD78FC22 for ; Mon, 30 Jun 2008 01:51:57 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m5U1pvEq057385 for ; Mon, 30 Jun 2008 01:51:57 GMT (envelope-from julian@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m5U1pufF057383 for perforce@freebsd.org; Mon, 30 Jun 2008 01:51:56 GMT (envelope-from julian@freebsd.org) Date: Mon, 30 Jun 2008 01:51:56 GMT Message-Id: <200806300151.m5U1pufF057383@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to julian@freebsd.org using -f From: Julian Elischer To: Perforce Change Reviews Cc: Subject: PERFORCE change 144325 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 30 Jun 2008 01:51:58 -0000 http://perforce.freebsd.org/chv.cgi?CH=144325 Change 144325 by julian@julian_trafmon1 on 2008/06/30 01:51:33 IFC@144321 Affected files ... .. //depot/projects/vimage/src/sys/amd64/amd64/bpf_jit_machdep.c#2 integrate .. //depot/projects/vimage/src/sys/amd64/amd64/bpf_jit_machdep.h#2 integrate .. //depot/projects/vimage/src/sys/amd64/amd64/mem.c#3 integrate .. //depot/projects/vimage/src/sys/amd64/amd64/minidump_machdep.c#7 integrate .. //depot/projects/vimage/src/sys/amd64/amd64/pmap.c#17 integrate .. //depot/projects/vimage/src/sys/amd64/amd64/trap.c#10 integrate .. //depot/projects/vimage/src/sys/amd64/conf/GENERIC#16 integrate .. //depot/projects/vimage/src/sys/amd64/include/iodev.h#2 integrate .. //depot/projects/vimage/src/sys/amd64/include/memdev.h#2 integrate .. //depot/projects/vimage/src/sys/amd64/include/pmap.h#5 integrate .. //depot/projects/vimage/src/sys/amd64/include/pmc_mdep.h#3 integrate .. //depot/projects/vimage/src/sys/amd64/include/stack.h#2 integrate .. //depot/projects/vimage/src/sys/amd64/include/vmparam.h#7 integrate .. //depot/projects/vimage/src/sys/arm/include/memdev.h#2 integrate .. //depot/projects/vimage/src/sys/boot/Makefile.inc#1 branch .. //depot/projects/vimage/src/sys/boot/arm/Makefile.inc#1 branch .. //depot/projects/vimage/src/sys/boot/arm/at91/Makefile.inc#4 integrate .. //depot/projects/vimage/src/sys/boot/efi/Makefile.inc#2 integrate .. //depot/projects/vimage/src/sys/boot/i386/Makefile.inc#2 integrate .. //depot/projects/vimage/src/sys/boot/i386/loader/Makefile#3 integrate .. //depot/projects/vimage/src/sys/boot/ia64/Makefile.inc#2 integrate .. //depot/projects/vimage/src/sys/boot/ia64/common/Makefile#2 integrate .. //depot/projects/vimage/src/sys/boot/ia64/efi/Makefile#2 integrate .. //depot/projects/vimage/src/sys/boot/ia64/ski/Makefile#2 integrate .. //depot/projects/vimage/src/sys/boot/ofw/Makefile.inc#1 branch .. //depot/projects/vimage/src/sys/boot/pc98/Makefile.inc#3 integrate .. //depot/projects/vimage/src/sys/boot/pc98/boot2/Makefile#2 integrate .. //depot/projects/vimage/src/sys/boot/pc98/loader/Makefile#2 integrate .. //depot/projects/vimage/src/sys/boot/powerpc/Makefile.inc#1 branch .. //depot/projects/vimage/src/sys/boot/powerpc/ofw/Makefile#3 integrate .. //depot/projects/vimage/src/sys/boot/sparc64/Makefile.inc#2 integrate .. //depot/projects/vimage/src/sys/boot/sparc64/loader/Makefile#2 integrate .. //depot/projects/vimage/src/sys/boot/uboot/Makefile.inc#1 branch .. //depot/projects/vimage/src/sys/conf/NOTES#25 integrate .. //depot/projects/vimage/src/sys/conf/files#29 integrate .. //depot/projects/vimage/src/sys/conf/kern.mk#5 integrate .. //depot/projects/vimage/src/sys/conf/kern.pre.mk#11 integrate .. //depot/projects/vimage/src/sys/dev/aac/aac.c#7 integrate .. //depot/projects/vimage/src/sys/dev/aac/aac_pci.c#7 integrate .. //depot/projects/vimage/src/sys/dev/acpi_support/acpi_asus.c#5 integrate .. //depot/projects/vimage/src/sys/dev/agp/agp_i810.c#3 integrate .. //depot/projects/vimage/src/sys/dev/et/if_et.c#1 branch .. //depot/projects/vimage/src/sys/dev/et/if_etreg.h#1 branch .. //depot/projects/vimage/src/sys/dev/et/if_etvar.h#1 branch .. //depot/projects/vimage/src/sys/dev/fe/if_fe.c#4 integrate .. //depot/projects/vimage/src/sys/dev/fe/if_fe_cbus.c#2 integrate .. //depot/projects/vimage/src/sys/dev/fe/if_fe_isa.c#2 integrate .. //depot/projects/vimage/src/sys/dev/fe/if_fe_pccard.c#3 integrate .. //depot/projects/vimage/src/sys/dev/fe/if_fevar.h#3 integrate .. //depot/projects/vimage/src/sys/dev/gem/if_gem.c#10 integrate .. //depot/projects/vimage/src/sys/dev/io/iodev.c#2 integrate .. //depot/projects/vimage/src/sys/dev/mfi/mfi.c#13 integrate .. //depot/projects/vimage/src/sys/dev/mii/miidevs#13 integrate .. //depot/projects/vimage/src/sys/dev/mii/truephy.c#1 branch .. //depot/projects/vimage/src/sys/dev/mii/truephyreg.h#1 branch .. //depot/projects/vimage/src/sys/dev/usb/usbdevs#23 integrate .. //depot/projects/vimage/src/sys/dev/usb/uscanner.c#8 integrate .. //depot/projects/vimage/src/sys/dev/wpi/if_wpi.c#6 integrate .. //depot/projects/vimage/src/sys/fs/devfs/devfs_rule.c#3 integrate .. //depot/projects/vimage/src/sys/geom/journal/g_journal.c#7 integrate .. //depot/projects/vimage/src/sys/i386/conf/GENERIC#18 integrate .. //depot/projects/vimage/src/sys/i386/i386/bpf_jit_machdep.c#2 integrate .. //depot/projects/vimage/src/sys/i386/i386/bpf_jit_machdep.h#2 integrate .. //depot/projects/vimage/src/sys/i386/include/iodev.h#2 integrate .. //depot/projects/vimage/src/sys/i386/include/memdev.h#2 integrate .. //depot/projects/vimage/src/sys/ia64/include/memdev.h#2 integrate .. //depot/projects/vimage/src/sys/kern/kern_cpuset.c#3 integrate .. //depot/projects/vimage/src/sys/kern/kern_descrip.c#15 integrate .. //depot/projects/vimage/src/sys/kern/kern_intr.c#10 integrate .. //depot/projects/vimage/src/sys/kern/kern_jail.c#9 integrate .. //depot/projects/vimage/src/sys/kern/kern_lockf.c#6 integrate .. //depot/projects/vimage/src/sys/kern/kern_umtx.c#10 integrate .. //depot/projects/vimage/src/sys/kern/kern_xxx.c#6 integrate .. //depot/projects/vimage/src/sys/kern/link_elf_obj.c#7 integrate .. //depot/projects/vimage/src/sys/kern/stack_protector.c#1 branch .. //depot/projects/vimage/src/sys/kern/subr_bus.c#10 integrate .. //depot/projects/vimage/src/sys/kern/sysv_sem.c#5 integrate .. //depot/projects/vimage/src/sys/kern/uipc_sem.c#7 integrate .. //depot/projects/vimage/src/sys/kern/uipc_shm.c#3 integrate .. //depot/projects/vimage/src/sys/kern/vfs_aio.c#7 integrate .. //depot/projects/vimage/src/sys/kern/vfs_syscalls.c#14 integrate .. //depot/projects/vimage/src/sys/mips/include/iodev.h#2 integrate .. //depot/projects/vimage/src/sys/mips/include/memdev.h#2 integrate .. //depot/projects/vimage/src/sys/modules/Makefile#22 integrate .. //depot/projects/vimage/src/sys/modules/ath_rate_amrr/Makefile#4 integrate .. //depot/projects/vimage/src/sys/modules/et/Makefile#1 branch .. //depot/projects/vimage/src/sys/modules/mii/Makefile#5 integrate .. //depot/projects/vimage/src/sys/modules/nfslockd/Makefile#2 integrate .. //depot/projects/vimage/src/sys/modules/ralfw/Makefile#2 integrate .. //depot/projects/vimage/src/sys/modules/sem/Makefile#2 integrate .. //depot/projects/vimage/src/sys/net/if.c#28 integrate .. //depot/projects/vimage/src/sys/net/if_gre.c#6 integrate .. //depot/projects/vimage/src/sys/net/if_gre.h#3 integrate .. //depot/projects/vimage/src/sys/net/if_loop.c#20 integrate .. //depot/projects/vimage/src/sys/net/if_var.h#14 integrate .. //depot/projects/vimage/src/sys/netgraph/netgraph.h#9 integrate .. //depot/projects/vimage/src/sys/netinet/in.c#12 integrate .. //depot/projects/vimage/src/sys/netinet/libalias/alias.c#6 integrate .. //depot/projects/vimage/src/sys/netinet/libalias/alias_db.c#6 integrate .. //depot/projects/vimage/src/sys/netinet/libalias/alias_ftp.c#4 integrate .. //depot/projects/vimage/src/sys/netinet6/in6_rmx.c#13 integrate .. //depot/projects/vimage/src/sys/netinet6/ip6_ipsec.c#9 integrate .. //depot/projects/vimage/src/sys/netipsec/key.c#16 integrate .. //depot/projects/vimage/src/sys/nfsclient/nfs.h#4 integrate .. //depot/projects/vimage/src/sys/nfsclient/nfs_node.c#4 integrate .. //depot/projects/vimage/src/sys/nfsclient/nfs_vfsops.c#13 integrate .. //depot/projects/vimage/src/sys/nfsclient/nfs_vnops.c#13 integrate .. //depot/projects/vimage/src/sys/nfsclient/nfsmount.h#3 integrate .. //depot/projects/vimage/src/sys/nfsclient/nfsnode.h#5 integrate .. //depot/projects/vimage/src/sys/nlm/nlm.h#2 integrate .. //depot/projects/vimage/src/sys/nlm/nlm_advlock.c#1 branch .. //depot/projects/vimage/src/sys/nlm/nlm_prot.h#2 integrate .. //depot/projects/vimage/src/sys/nlm/nlm_prot_clnt.c#2 integrate .. //depot/projects/vimage/src/sys/nlm/nlm_prot_impl.c#5 integrate .. //depot/projects/vimage/src/sys/nlm/nlm_prot_server.c#2 integrate .. //depot/projects/vimage/src/sys/pci/viapm.c#5 integrate .. //depot/projects/vimage/src/sys/powerpc/include/memdev.h#2 integrate .. //depot/projects/vimage/src/sys/rpc/auth_unix.c#3 integrate .. //depot/projects/vimage/src/sys/rpc/authunix_prot.c#3 integrate .. //depot/projects/vimage/src/sys/rpc/clnt.h#2 integrate .. //depot/projects/vimage/src/sys/rpc/clnt_dg.c#3 integrate .. //depot/projects/vimage/src/sys/rpc/clnt_rc.c#2 integrate .. //depot/projects/vimage/src/sys/rpc/clnt_vc.c#2 integrate .. //depot/projects/vimage/src/sys/rpc/rpcb_clnt.c#2 integrate .. //depot/projects/vimage/src/sys/rpc/svc_vc.c#2 integrate .. //depot/projects/vimage/src/sys/security/mac/mac_framework.h#11 integrate .. //depot/projects/vimage/src/sys/security/mac/mac_policy.h#12 integrate .. //depot/projects/vimage/src/sys/security/mac/mac_posix_sem.c#6 integrate .. //depot/projects/vimage/src/sys/security/mac_biba/mac_biba.c#8 integrate .. //depot/projects/vimage/src/sys/security/mac_mls/mac_mls.c#10 integrate .. //depot/projects/vimage/src/sys/security/mac_stub/mac_stub.c#11 integrate .. //depot/projects/vimage/src/sys/security/mac_test/mac_test.c#11 integrate .. //depot/projects/vimage/src/sys/sparc64/include/in_cksum.h#2 integrate .. //depot/projects/vimage/src/sys/sparc64/include/memdev.h#2 integrate .. //depot/projects/vimage/src/sys/sun4v/include/in_cksum.h#2 integrate .. //depot/projects/vimage/src/sys/sun4v/include/memdev.h#2 integrate .. //depot/projects/vimage/src/sys/sys/bus.h#5 integrate .. //depot/projects/vimage/src/sys/sys/fcntl.h#4 integrate .. //depot/projects/vimage/src/sys/sys/file.h#6 integrate .. //depot/projects/vimage/src/sys/sys/jail.h#4 integrate .. //depot/projects/vimage/src/sys/sys/ksem.h#2 integrate .. //depot/projects/vimage/src/sys/sys/lockf.h#4 integrate .. //depot/projects/vimage/src/sys/sys/param.h#21 integrate .. //depot/projects/vimage/src/sys/sys/priv.h#9 integrate .. //depot/projects/vimage/src/sys/sys/semaphore.h#2 integrate .. //depot/projects/vimage/src/sys/sys/umtx.h#7 integrate .. //depot/projects/vimage/src/sys/sys/user.h#7 integrate .. //depot/projects/vimage/src/sys/vm/vm_kern.c#9 integrate .. //depot/projects/vimage/src/sys/vm/vm_map.c#11 integrate Differences ... ==== //depot/projects/vimage/src/sys/amd64/amd64/bpf_jit_machdep.c#2 (text+ko) ==== @@ -30,7 +30,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/bpf_jit_machdep.c,v 1.4 2006/01/03 20:26:02 jkim Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/bpf_jit_machdep.c,v 1.6 2008/06/24 20:12:12 jkim Exp $"); #include "opt_bpf.h" @@ -132,11 +132,11 @@ /* create the procedure header */ PUSH(RBP); - MOVrq(RBP, RSP); - MOVoqd(RBP, -8, ESI); - MOVoqd(RBP, -12, EDX); + MOVrq(RSP, RBP); + MOVdoq(ESI, -8, RBP); + MOVdoq(EDX, -12, RBP); PUSH(RBX); - MOVrq(RBX, RDI); + MOVrq(RDI, RBX); for (i = 0; i < nins; i++) { stream.bpf_pc++; @@ -146,7 +146,7 @@ return NULL; case BPF_RET|BPF_K: - MOVid(EAX, ins->k); + MOVid(ins->k, EAX); POP(RBX); LEAVE_RET(); break; @@ -157,119 +157,119 @@ break; case BPF_LD|BPF_W|BPF_ABS: - MOVid(ECX, ins->k); - MOVrd(ESI, ECX); - ADDib(ECX, sizeof(int)); - CMPodd(ECX, RBP, -12); + MOVid(ins->k, ECX); + MOVrd(ECX, ESI); + ADDib(sizeof(int), ECX); + CMPoqd(-12, RBP, ECX); JLEb(5); - ZERO_EAX(); + ZEROrd(EAX); POP(RBX); LEAVE_RET(); - MOVobd(EAX, RBX, RSI); + MOVobd(RBX, RSI, EAX); BSWAP(EAX); break; case BPF_LD|BPF_H|BPF_ABS: - ZERO_EAX(); - MOVid(ECX, ins->k); - MOVrd(ESI, ECX); - ADDib(ECX, sizeof(short)); - CMPodd(ECX, RBP, -12); + ZEROrd(EAX); + MOVid(ins->k, ECX); + MOVrd(ECX, ESI); + ADDib(sizeof(short), ECX); + CMPoqd(-12, RBP, ECX); JLEb(3); POP(RBX); LEAVE_RET(); - MOVobw(AX, RBX, RSI); + MOVobw(RBX, RSI, AX); SWAP_AX(); break; case BPF_LD|BPF_B|BPF_ABS: - ZERO_EAX(); - MOVid(ECX, ins->k); - CMPodd(ECX, RBP, -12); + ZEROrd(EAX); + MOVid(ins->k, ECX); + CMPoqd(-12, RBP, ECX); JLEb(3); POP(RBX); LEAVE_RET(); - MOVobb(AL, RBX, RCX); + MOVobb(RBX, RCX, AL); break; case BPF_LD|BPF_W|BPF_LEN: - MOVodd(EAX, RBP, -8); + MOVoqd(-8, RBP, EAX); break; case BPF_LDX|BPF_W|BPF_LEN: - MOVodd(EDX, RBP, -8); + MOVoqd(-8, RBP, EDX); break; case BPF_LD|BPF_W|BPF_IND: - MOVid(ECX, ins->k); - ADDrd(ECX, EDX); - MOVrd(ESI, ECX); - ADDib(ECX, sizeof(int)); - CMPodd(ECX, RBP, -12); + MOVid(ins->k, ECX); + ADDrd(EDX, ECX); + MOVrd(ECX, ESI); + ADDib(sizeof(int), ECX); + CMPoqd(-12, RBP, ECX); JLEb(5); - ZERO_EAX(); + ZEROrd(EAX); POP(RBX); LEAVE_RET(); - MOVobd(EAX, RBX, RSI); + MOVobd(RBX, RSI, EAX); BSWAP(EAX); break; case BPF_LD|BPF_H|BPF_IND: - ZERO_EAX(); - MOVid(ECX, ins->k); - ADDrd(ECX, EDX); - MOVrd(ESI, ECX); - ADDib(ECX, sizeof(short)); - CMPodd(ECX, RBP, -12); + ZEROrd(EAX); + MOVid(ins->k, ECX); + ADDrd(EDX, ECX); + MOVrd(ECX, ESI); + ADDib(sizeof(short), ECX); + CMPoqd(-12, RBP, ECX); JLEb(3); POP(RBX); LEAVE_RET(); - MOVobw(AX, RBX, RSI); + MOVobw(RBX, RSI, AX); SWAP_AX(); break; case BPF_LD|BPF_B|BPF_IND: - ZERO_EAX(); - MOVid(ECX, ins->k); - ADDrd(ECX, EDX); - CMPodd(ECX, RBP, -12); + ZEROrd(EAX); + MOVid(ins->k, ECX); + ADDrd(EDX, ECX); + CMPoqd(-12, RBP, ECX); JLEb(3); POP(RBX); LEAVE_RET(); - MOVobb(AL, RBX, RCX); + MOVobb(RBX, RCX, AL); break; case BPF_LDX|BPF_MSH|BPF_B: - MOVid(ECX, ins->k); - CMPodd(ECX, RBP, -12); + MOVid(ins->k, ECX); + CMPoqd(-12, RBP, ECX); JLEb(5); - ZERO_EAX(); + ZEROrd(EAX); POP(RBX); LEAVE_RET(); - ZERO_EDX(); - MOVobb(DL, RBX, RCX); - ANDib(DL, 0xf); - SHLib(EDX, 2); + ZEROrd(EDX); + MOVobb(RBX, RCX, DL); + ANDib(0xf, DL); + SHLib(2, EDX); break; case BPF_LD|BPF_IMM: - MOVid(EAX, ins->k); + MOVid(ins->k, EAX); break; case BPF_LDX|BPF_IMM: - MOVid(EDX, ins->k); + MOVid(ins->k, EDX); break; case BPF_LD|BPF_MEM: - MOViq(RCX, (uintptr_t)mem); - MOVid(ESI, ins->k * 4); - MOVobd(EAX, RCX, RSI); + MOViq((uintptr_t)mem, RCX); + MOVid(ins->k * 4, ESI); + MOVobd(RCX, RSI, EAX); break; case BPF_LDX|BPF_MEM: - MOViq(RCX, (uintptr_t)mem); - MOVid(ESI, ins->k * 4); - MOVobd(EDX, RCX, RSI); + MOViq((uintptr_t)mem, RCX); + MOVid(ins->k * 4, ESI); + MOVobd(RCX, RSI, EDX); break; case BPF_ST: @@ -278,15 +278,15 @@ * be optimized if the previous instruction * was already of this type */ - MOViq(RCX, (uintptr_t)mem); - MOVid(ESI, ins->k * 4); - MOVomd(RCX, RSI, EAX); + MOViq((uintptr_t)mem, RCX); + MOVid(ins->k * 4, ESI); + MOVomd(EAX, RCX, RSI); break; case BPF_STX: - MOViq(RCX, (uintptr_t)mem); - MOVid(ESI, ins->k * 4); - MOVomd(RCX, RSI, EDX); + MOViq((uintptr_t)mem, RCX); + MOVid(ins->k * 4, ESI); + MOVomd(EDX, RCX, RSI); break; case BPF_JMP|BPF_JA: @@ -295,7 +295,7 @@ break; case BPF_JMP|BPF_JGT|BPF_K: - CMPid(EAX, ins->k); + CMPid(ins->k, EAX); /* 5 is the size of the following JMP */ JG(stream.refs[stream.bpf_pc + ins->jt] - stream.refs[stream.bpf_pc] + 5 ); @@ -304,7 +304,7 @@ break; case BPF_JMP|BPF_JGE|BPF_K: - CMPid(EAX, ins->k); + CMPid(ins->k, EAX); JGE(stream.refs[stream.bpf_pc + ins->jt] - stream.refs[stream.bpf_pc] + 5); JMP(stream.refs[stream.bpf_pc + ins->jf] - @@ -312,7 +312,7 @@ break; case BPF_JMP|BPF_JEQ|BPF_K: - CMPid(EAX, ins->k); + CMPid(ins->k, EAX); JE(stream.refs[stream.bpf_pc + ins->jt] - stream.refs[stream.bpf_pc] + 5); JMP(stream.refs[stream.bpf_pc + ins->jf] - @@ -320,8 +320,8 @@ break; case BPF_JMP|BPF_JSET|BPF_K: - MOVrd(ECX, EAX); - ANDid(ECX, ins->k); + MOVrd(EAX, ECX); + ANDid(ins->k, ECX); JE(stream.refs[stream.bpf_pc + ins->jf] - stream.refs[stream.bpf_pc] + 5); JMP(stream.refs[stream.bpf_pc + ins->jt] - @@ -329,7 +329,7 @@ break; case BPF_JMP|BPF_JGT|BPF_X: - CMPrd(EAX, EDX); + CMPrd(EDX, EAX); JA(stream.refs[stream.bpf_pc + ins->jt] - stream.refs[stream.bpf_pc] + 5); JMP(stream.refs[stream.bpf_pc + ins->jf] - @@ -337,7 +337,7 @@ break; case BPF_JMP|BPF_JGE|BPF_X: - CMPrd(EAX, EDX); + CMPrd(EDX, EAX); JAE(stream.refs[stream.bpf_pc + ins->jt] - stream.refs[stream.bpf_pc] + 5); JMP(stream.refs[stream.bpf_pc + ins->jf] - @@ -345,7 +345,7 @@ break; case BPF_JMP|BPF_JEQ|BPF_X: - CMPrd(EAX, EDX); + CMPrd(EDX, EAX); JE(stream.refs[stream.bpf_pc + ins->jt] - stream.refs[stream.bpf_pc] + 5); JMP(stream.refs[stream.bpf_pc + ins->jf] - @@ -353,8 +353,8 @@ break; case BPF_JMP|BPF_JSET|BPF_X: - MOVrd(ECX, EAX); - ANDrd(ECX, EDX); + MOVrd(EAX, ECX); + ANDrd(EDX, ECX); JE(stream.refs[stream.bpf_pc + ins->jf] - stream.refs[stream.bpf_pc] + 5); JMP(stream.refs[stream.bpf_pc + ins->jt] - @@ -362,46 +362,46 @@ break; case BPF_ALU|BPF_ADD|BPF_X: - ADDrd(EAX, EDX); + ADDrd(EDX, EAX); break; case BPF_ALU|BPF_SUB|BPF_X: - SUBrd(EAX, EDX); + SUBrd(EDX, EAX); break; case BPF_ALU|BPF_MUL|BPF_X: + MOVrd(EDX, ECX); + MULrd(EDX); MOVrd(ECX, EDX); - MULrd(EDX); - MOVrd(EDX, ECX); break; case BPF_ALU|BPF_DIV|BPF_X: - CMPid(EDX, 0); + CMPid(0, EDX); JNEb(5); - ZERO_EAX(); + ZEROrd(EAX); POP(RBX); LEAVE_RET(); + MOVrd(EDX, ECX); + ZEROrd(EDX); + DIVrd(ECX); MOVrd(ECX, EDX); - ZERO_EDX(); - DIVrd(ECX); - MOVrd(EDX, ECX); break; case BPF_ALU|BPF_AND|BPF_X: - ANDrd(EAX, EDX); + ANDrd(EDX, EAX); break; case BPF_ALU|BPF_OR|BPF_X: - ORrd(EAX, EDX); + ORrd(EDX, EAX); break; case BPF_ALU|BPF_LSH|BPF_X: - MOVrd(ECX, EDX); + MOVrd(EDX, ECX); SHL_CLrb(EAX); break; case BPF_ALU|BPF_RSH|BPF_X: - MOVrd(ECX, EDX); + MOVrd(EDX, ECX); SHR_CLrb(EAX); break; @@ -414,34 +414,34 @@ break; case BPF_ALU|BPF_MUL|BPF_K: + MOVrd(EDX, ECX); + MOVid(ins->k, EDX); + MULrd(EDX); MOVrd(ECX, EDX); - MOVid(EDX, ins->k); - MULrd(EDX); - MOVrd(EDX, ECX); break; case BPF_ALU|BPF_DIV|BPF_K: + MOVrd(EDX, ECX); + ZEROrd(EDX); + MOVid(ins->k, ESI); + DIVrd(ESI); MOVrd(ECX, EDX); - ZERO_EDX(); - MOVid(ESI, ins->k); - DIVrd(ESI); - MOVrd(EDX, ECX); break; case BPF_ALU|BPF_AND|BPF_K: - ANDid(EAX, ins->k); + ANDid(ins->k, EAX); break; case BPF_ALU|BPF_OR|BPF_K: - ORid(EAX, ins->k); + ORid(ins->k, EAX); break; case BPF_ALU|BPF_LSH|BPF_K: - SHLib(EAX, (ins->k) & 255); + SHLib((ins->k) & 0xff, EAX); break; case BPF_ALU|BPF_RSH|BPF_K: - SHRib(EAX, (ins->k) & 255); + SHRib((ins->k) & 0xff, EAX); break; case BPF_ALU|BPF_NEG: @@ -449,11 +449,11 @@ break; case BPF_MISC|BPF_TAX: - MOVrd(EDX, EAX); + MOVrd(EAX, EDX); break; case BPF_MISC|BPF_TXA: - MOVrd(EAX, EDX); + MOVrd(EDX, EAX); break; } ins++; ==== //depot/projects/vimage/src/sys/amd64/amd64/bpf_jit_machdep.h#2 (text+ko) ==== @@ -28,7 +28,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/amd64/bpf_jit_machdep.h,v 1.3 2005/12/06 20:11:07 jkim Exp $ + * $FreeBSD: src/sys/amd64/amd64/bpf_jit_machdep.h,v 1.5 2008/06/24 20:12:12 jkim Exp $ */ #ifndef _BPF_JIT_MACHDEP_H_ @@ -104,254 +104,252 @@ * native Instruction Macros */ -/* mov r32,i32 */ -#define MOVid(r32, i32) do { \ +/* movl i32,r32 */ +#define MOVid(i32, r32) do { \ emitm(&stream, (11 << 4) | (1 << 3) | (r32 & 0x7), 1); \ emitm(&stream, i32, 4); \ } while (0) -/* mov r64,i64 */ -#define MOViq(r64, i64) do { \ +/* movq i64,r64 */ +#define MOViq(i64, r64) do { \ emitm(&stream, 0x48, 1); \ emitm(&stream, (11 << 4) | (1 << 3) | (r64 & 0x7), 1); \ emitm(&stream, i64, 4); \ emitm(&stream, (i64 >> 32), 4); \ } while (0) -/* mov dr32,sr32 */ -#define MOVrd(dr32, sr32) do { \ - emitm(&stream, (8 << 4) | 3 | (1 << 3), 1); \ +/* movl sr32,dr32 */ +#define MOVrd(sr32, dr32) do { \ + emitm(&stream, 0x89, 1); \ emitm(&stream, \ - (3 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \ + (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1); \ } while (0) -/* mov dr64,sr64 */ -#define MOVrq(dr64, sr64) do { \ - emitm(&stream, 0x48, 1); \ - emitm(&stream, (8 << 4) | 3 | (1 << 3), 1); \ +/* movq sr64,dr64 */ +#define MOVrq(sr64, dr64) do { \ + emitm(&stream, 0x8948, 2); \ emitm(&stream, \ - (3 << 6) | ((dr64 & 0x7) << 3) | (sr64 & 0x7), 1); \ + (3 << 6) | ((sr64 & 0x7) << 3) | (dr64 & 0x7), 1); \ } while (0) -/* mov dr32,sr64[off] */ -#define MOVodd(dr32, sr64, off) do { \ - emitm(&stream, (8 << 4) | 3 | (1 << 3), 1); \ +/* movl off(sr64),dr32 */ +#define MOVoqd(off, sr64, dr32) do { \ + emitm(&stream, 0x8b, 1); \ emitm(&stream, \ (1 << 6) | ((dr32 & 0x7) << 3) | (sr64 & 0x7), 1); \ emitm(&stream, off, 1); \ } while (0) -/* mov dr64[off],sr32 */ -#define MOVoqd(dr64, off, sr32) do { \ - emitm(&stream, (8 << 4) | 1 | (1 << 3), 1); \ +/* movl sr32,off(dr64) */ +#define MOVdoq(sr32, off, dr64) do { \ + emitm(&stream, 0x89, 1); \ emitm(&stream, \ (1 << 6) | ((sr32 & 0x7) << 3) | (dr64 & 0x7), 1); \ emitm(&stream, off, 1); \ } while (0) -/* mov dr32,sr64[or64] */ -#define MOVobd(dr32, sr64, or64) do { \ - emitm(&stream, (8 << 4) | 3 | (1 << 3), 1); \ +/* movl (sr64,or64,1),dr32 */ +#define MOVobd(sr64, or64, dr32) do { \ + emitm(&stream, 0x8b, 1); \ emitm(&stream, ((dr32 & 0x7) << 3) | 4, 1); \ emitm(&stream, ((or64 & 0x7) << 3) | (sr64 & 0x7), 1); \ } while (0) -/* mov dr16,sr64[or64] */ -#define MOVobw(dr32, sr64, or64) do { \ - emitm(&stream, 0x66, 1); \ - emitm(&stream, (8 << 4) | 3 | (1 << 3), 1); \ - emitm(&stream, ((dr32 & 0x7) << 3) | 4, 1); \ +/* movw (sr64,or64,1),dr16 */ +#define MOVobw(sr64, or64, dr16) do { \ + emitm(&stream, 0x8b66, 2); \ + emitm(&stream, ((dr16 & 0x7) << 3) | 4, 1); \ emitm(&stream, ((or64 & 0x7) << 3) | (sr64 & 0x7), 1); \ } while (0) -/* mov dr8,sr64[or64] */ -#define MOVobb(dr8, sr64, or64) do { \ +/* movb (sr64,or64,1),dr8 */ +#define MOVobb(sr64, or64, dr8) do { \ emitm(&stream, 0x8a, 1); \ emitm(&stream, ((dr8 & 0x7) << 3) | 4, 1); \ emitm(&stream, ((or64 & 0x7) << 3) | (sr64 & 0x7), 1); \ } while (0) -/* mov [dr64][or64],sr32 */ -#define MOVomd(dr64, or64, sr32) do { \ +/* movl sr32,(dr64,or64,1) */ +#define MOVomd(sr32, dr64, or64) do { \ emitm(&stream, 0x89, 1); \ emitm(&stream, ((sr32 & 0x7) << 3) | 4, 1); \ emitm(&stream, ((or64 & 0x7) << 3) | (dr64 & 0x7), 1); \ } while (0) -/* bswap dr32 */ +/* bswapl dr32 */ #define BSWAP(dr32) do { \ emitm(&stream, 0xf, 1); \ emitm(&stream, (0x19 << 3) | dr32, 1); \ } while (0) -/* xchg al,ah */ +/* xchgb %al,%ah */ #define SWAP_AX() do { \ - emitm(&stream, 0x86, 1); \ - emitm(&stream, 0xc4, 1); \ + emitm(&stream, 0xc486, 2); \ } while (0) -/* push r64 */ +/* pushq r64 */ #define PUSH(r64) do { \ emitm(&stream, (5 << 4) | (0 << 3) | (r64 & 0x7), 1); \ } while (0) -/* pop r64 */ +/* popq r64 */ #define POP(r64) do { \ emitm(&stream, (5 << 4) | (1 << 3) | (r64 & 0x7), 1); \ } while (0) -/* leave/ret */ +/* leaveq/retq */ #define LEAVE_RET() do { \ - emitm(&stream, 0xc9, 1); \ - emitm(&stream, 0xc3, 1); \ + emitm(&stream, 0xc3c9, 2); \ } while (0) -/* add dr32,sr32 */ -#define ADDrd(dr32, sr32) do { \ - emitm(&stream, 0x03, 1); \ +/* addl sr32,dr32 */ +#define ADDrd(sr32, dr32) do { \ + emitm(&stream, 0x01, 1); \ emitm(&stream, \ - (3 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \ + (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1); \ } while (0) -/* add eax,i32 */ +/* addl i32,%eax */ #define ADD_EAXi(i32) do { \ emitm(&stream, 0x05, 1); \ emitm(&stream, i32, 4); \ } while (0) -/* add r32,i32 */ -#define ADDid(r32, i32) do { \ +/* addl i32,r32 */ +#define ADDid(i32, r32) do { \ emitm(&stream, 0x81, 1); \ emitm(&stream, (24 << 3) | r32, 1); \ emitm(&stream, i32, 4); \ } while (0) -/* add r32,i8 */ -#define ADDib(r32, i8) do { \ +/* addl i8,r32 */ +#define ADDib(i8, r32) do { \ emitm(&stream, 0x83, 1); \ emitm(&stream, (24 << 3) | r32, 1); \ emitm(&stream, i8, 1); \ } while (0) -/* sub dr32,sr32 */ -#define SUBrd(dr32, sr32) do { \ - emitm(&stream, 0x2b, 1); \ +/* subl sr32,dr32 */ +#define SUBrd(sr32, dr32) do { \ + emitm(&stream, 0x29, 1); \ emitm(&stream, \ - (3 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \ + (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1); \ } while (0) -/* sub eax,i32 */ +/* subl i32,%eax */ #define SUB_EAXi(i32) do { \ emitm(&stream, 0x2d, 1); \ emitm(&stream, i32, 4); \ } while (0) -/* mul r32 */ +/* mull r32 */ #define MULrd(r32) do { \ emitm(&stream, 0xf7, 1); \ emitm(&stream, (7 << 5) | (r32 & 0x7), 1); \ } while (0) -/* div r32 */ +/* divl r32 */ #define DIVrd(r32) do { \ emitm(&stream, 0xf7, 1); \ emitm(&stream, (15 << 4) | (r32 & 0x7), 1); \ } while (0) -/* and r8,i8 */ -#define ANDib(r8, i8) do { \ - emitm(&stream, 0x80, 1); \ - emitm(&stream, (7 << 5) | r8, 1); \ +/* andb i8,r8 */ +#define ANDib(i8, r8) do { \ + if (r8 == AL) { \ + emitm(&stream, 0x24, 1); \ + } else { \ + emitm(&stream, 0x80, 1); \ + emitm(&stream, (7 << 5) | r8, 1); \ + } \ emitm(&stream, i8, 1); \ } while (0) -/* and r32,i32 */ -#define ANDid(r32, i32) do { \ +/* andl i32,r32 */ +#define ANDid(i32, r32) do { \ if (r32 == EAX) { \ emitm(&stream, 0x25, 1); \ - emitm(&stream, i32, 4); \ } else { \ emitm(&stream, 0x81, 1); \ emitm(&stream, (7 << 5) | r32, 1); \ - emitm(&stream, i32, 4); \ } \ + emitm(&stream, i32, 4); \ } while (0) -/* and dr32,sr32 */ -#define ANDrd(dr32, sr32) do { \ - emitm(&stream, 0x23, 1); \ +/* andl sr32,dr32 */ +#define ANDrd(sr32, dr32) do { \ + emitm(&stream, 0x21, 1); \ emitm(&stream, \ - (3 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \ + (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1); \ } while (0) -/* or dr32,sr32 */ -#define ORrd(dr32, sr32) do { \ - emitm(&stream, 0x0b, 1); \ +/* orl sr32,dr32 */ +#define ORrd(sr32, dr32) do { \ + emitm(&stream, 0x09, 1); \ emitm(&stream, \ - (3 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \ + (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1); \ } while (0) -/* or r32,i32 */ -#define ORid(r32, i32) do { \ +/* orl i32,r32 */ +#define ORid(i32, r32) do { \ if (r32 == EAX) { \ emitm(&stream, 0x0d, 1); \ - emitm(&stream, i32, 4); \ } else { \ emitm(&stream, 0x81, 1); \ emitm(&stream, (25 << 3) | r32, 1); \ - emitm(&stream, i32, 4); \ } \ + emitm(&stream, i32, 4); \ } while (0) -/* shl r32,i8 */ -#define SHLib(r32, i8) do { \ +/* shll i8,r32 */ +#define SHLib(i8, r32) do { \ emitm(&stream, 0xc1, 1); \ emitm(&stream, (7 << 5) | (r32 & 0x7), 1); \ emitm(&stream, i8, 1); \ } while (0) -/* shl dr32,cl */ +/* shll %cl,dr32 */ #define SHL_CLrb(dr32) do { \ emitm(&stream, 0xd3, 1); \ emitm(&stream, (7 << 5) | (dr32 & 0x7), 1); \ } while (0) -/* shr r32,i8 */ -#define SHRib(r32, i8) do { \ +/* shrl i8,r32 */ +#define SHRib(i8, r32) do { \ emitm(&stream, 0xc1, 1); \ emitm(&stream, (29 << 3) | (r32 & 0x7), 1); \ emitm(&stream, i8, 1); \ } while (0) -/* shr dr32,cl */ +/* shrl %cl,dr32 */ #define SHR_CLrb(dr32) do { \ emitm(&stream, 0xd3, 1); \ emitm(&stream, (29 << 3) | (dr32 & 0x7), 1); \ } while (0) -/* neg r32 */ +/* negl r32 */ #define NEGd(r32) do { \ emitm(&stream, 0xf7, 1); \ emitm(&stream, (27 << 3) | (r32 & 0x7), 1); \ } while (0) -/* cmp dr32,sr64[off] */ -#define CMPodd(dr32, sr64, off) do { \ - emitm(&stream, (3 << 4) | 3 | (1 << 3), 1); \ +/* cmpl off(sr64),dr32 */ +#define CMPoqd(off, sr64, dr32) do { \ + emitm(&stream, 0x3b, 1); \ emitm(&stream, \ (1 << 6) | ((dr32 & 0x7) << 3) | (sr64 & 0x7), 1); \ emitm(&stream, off, 1); \ } while (0) -/* cmp dr32,sr32 */ -#define CMPrd(dr32, sr32) do { \ - emitm(&stream, 0x3b, 1); \ +/* cmpl sr32,dr32 */ +#define CMPrd(sr32, dr32) do { \ + emitm(&stream, 0x39, 1); \ emitm(&stream, \ - (3 << 6) | ((dr32 & 0x7) << 3) | (sr32 & 0x7), 1); \ + (3 << 6) | ((sr32 & 0x7) << 3) | (dr32 & 0x7), 1); \ } while (0) -/* cmp dr32,i32 */ -#define CMPid(dr32, i32) do { \ +/* cmpl i32,dr32 */ +#define CMPid(i32, dr32) do { \ if (dr32 == EAX){ \ emitm(&stream, 0x3d, 1); \ emitm(&stream, i32, 4); \ @@ -362,7 +360,7 @@ } \ } while (0) -/* jne off32 */ +/* jne off8 */ #define JNEb(off8) do { \ emitm(&stream, 0x75, 1); \ emitm(&stream, off8, 1); \ @@ -370,15 +368,13 @@ /* je off32 */ #define JE(off32) do { \ - emitm(&stream, 0x0f, 1); \ - emitm(&stream, 0x84, 1); \ + emitm(&stream, 0x840f, 2); \ emitm(&stream, off32, 4); \ } while (0) /* jle off32 */ #define JLE(off32) do { \ - emitm(&stream, 0x0f, 1); \ - emitm(&stream, 0x8e, 1); \ + emitm(&stream, 0x8e0f, 2); \ emitm(&stream, off32, 4); \ } while (0) @@ -390,29 +386,25 @@ /* ja off32 */ #define JA(off32) do { \ - emitm(&stream, 0x0f, 1); \ - emitm(&stream, 0x87, 1); \ + emitm(&stream, 0x870f, 2); \ emitm(&stream, off32, 4); \ } while (0) /* jae off32 */ #define JAE(off32) do { \ - emitm(&stream, 0x0f, 1); \ - emitm(&stream, 0x83, 1); \ + emitm(&stream, 0x830f, 2); \ emitm(&stream, off32, 4); \ } while (0) /* jg off32 */ #define JG(off32) do { \ - emitm(&stream, 0x0f, 1); \ - emitm(&stream, 0x8f, 1); \ + emitm(&stream, 0x8f0f, 2); \ emitm(&stream, off32, 4); \ } while (0) /* jge off32 */ #define JGE(off32) do { \ - emitm(&stream, 0x0f, 1); \ - emitm(&stream, 0x8d, 1); \ + emitm(&stream, 0x8d0f, 2); \ emitm(&stream, off32, 4); \ >>> TRUNCATED FOR MAIL (1000 lines) <<<