From 908f8bb04f4b955f63d0a864f9b9a3657b01d2d2 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Mon, 18 Apr 2011 23:29:54 +0000 Subject: [PATCH] Added the "paddsb", "paddsw", "pand" and "pandn" instructions --- src/arch/i686.ins | 28 ++++++++++++++++++++++++++++ test/i686.S | 24 ++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/arch/i686.ins b/src/arch/i686.ins index e1b352a..c82fdf4 100644 --- a/src/arch/i686.ins +++ b/src/arch/i686.ins @@ -28,6 +28,34 @@ /* instructions */ /* EMMS 0x0f77 2 */ { "emms", 0x0f77, OP2F, AOT_NONE, AOT_NONE, AOT_NONE }, +/* PADDSB 0x0fec /r 2 mm mm/m64 */ +#if 1 /* FIXME doesn't work properly */ +{ "paddsb", 0x0fec, OP2F, OP_R64_R, OP_RM64_D0_R,AOT_NONE}, +{ "paddsb", 0x0fec, OP2F, OP_R64_R, OP_RM64_D8_R,AOT_NONE}, +{ "paddsb", 0x0fec, OP2F, OP_R64_R, OP_RM64_DW_R,AOT_NONE}, +{ "paddsb", 0x0fec, OP2F, OP_R64_R, OP_RM64_R64_R,AOT_NONE}, +#endif +/* PADDSW 0x0fed /r 2 mm mm/m64 */ +#if 1 /* FIXME doesn't work properly */ +{ "paddsw", 0x0fed, OP2F, OP_R64_R, OP_RM64_D0_R,AOT_NONE}, +{ "paddsw", 0x0fed, OP2F, OP_R64_R, OP_RM64_D8_R,AOT_NONE}, +{ "paddsw", 0x0fed, OP2F, OP_R64_R, OP_RM64_DW_R,AOT_NONE}, +{ "paddsw", 0x0fed, OP2F, OP_R64_R, OP_RM64_R64_R,AOT_NONE}, +#endif +/* PAND 0x0fdb /r 2 mm mm/m64 */ +#if 1 /* FIXME doesn't work properly */ +{ "pand", 0x0fdb, OP2F, OP_R64_R, OP_RM64_D0_R,AOT_NONE}, +{ "pand", 0x0fdb, OP2F, OP_R64_R, OP_RM64_D8_R,AOT_NONE}, +{ "pand", 0x0fdb, OP2F, OP_R64_R, OP_RM64_DW_R,AOT_NONE}, +{ "pand", 0x0fdb, OP2F, OP_R64_R, OP_RM64_R64_R,AOT_NONE}, +#endif +/* PANDN 0x0fdf /r 2 mm mm/m64 */ +#if 1 /* FIXME doesn't work properly */ +{ "pandn", 0x0fdf, OP2F, OP_R64_R, OP_RM64_D0_R,AOT_NONE}, +{ "pandn", 0x0fdf, OP2F, OP_R64_R, OP_RM64_D8_R,AOT_NONE}, +{ "pandn", 0x0fdf, OP2F, OP_R64_R, OP_RM64_DW_R,AOT_NONE}, +{ "pandn", 0x0fdf, OP2F, OP_R64_R, OP_RM64_R64_R,AOT_NONE}, +#endif /* POR 0x0feb /r 2 mm mm/m64 */ #if 1 /* FIXME doesn't work properly */ { "por", 0x0feb, OP2F, OP_R64_R, OP_RM64_D0_R,AOT_NONE}, diff --git a/test/i686.S b/test/i686.S index a1f1ac3..b128617 100644 --- a/test/i686.S +++ b/test/i686.S @@ -1,6 +1,30 @@ /* $Id$ */ .text emms /* 0f 77 */ +#if 1 /* FIXME doesn't work properly */ + paddsb %mm1, [%edx] + paddsb %mm2, [%edx + $0x56] + paddsb %mm3, [%edx + $0x789abc] + paddsb %mm4, %mm5 +#endif +#if 1 /* FIXME doesn't work properly */ + paddsw %mm1, [%edx] + paddsw %mm2, [%edx + $0x56] + paddsw %mm3, [%edx + $0x789abc] + paddsw %mm4, %mm5 +#endif +#if 1 /* FIXME doesn't work properly */ + pand %mm1, [%edx] + pand %mm2, [%edx + $0x56] + pand %mm3, [%edx + $0x789abc] + pand %mm4, %mm5 +#endif +#if 1 /* FIXME doesn't work properly */ + pandn %mm1, [%edx] + pandn %mm2, [%edx + $0x56] + pandn %mm3, [%edx + $0x789abc] + pandn %mm4, %mm5 +#endif #if 1 /* FIXME doesn't work properly */ por %mm1, [%edx] por %mm2, [%edx + $0x56]