/* $Id$ */ /* Copyright (c) 2011 Pierre Pronchery */ /* This file is part of DeforaOS Devel asm */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /* helpers */ /* mod r/m byte */ #define OP_R64 AO_REGISTER(0, 64, 0) #define OP_R64_R AO_REGISTER(AOF_I386_MODRM, 64, 8) #define OP_RM64_D0_R AO_DREGISTER(AOF_I386_MODRM, 0, W, 8) #define OP_RM64_D8_R AO_DREGISTER(AOF_I386_MODRM, 8, W, 8) #define OP_RM64_DW_R AO_DREGISTER(AOF_I386_MODRM, W, W, 8) #define OP_RM64_R64_R AO_REGISTER(AOF_I386_MODRM, 64, 8) /* instructions */ /* EMMS 0x0f77 2 */ { "emms", 0x0f77, OP2F, AOT_NONE, AOT_NONE, AOT_NONE }, /* MOVQ 0x0f6f /r OP2F mm mm/m64 */ #if 1 /* FIXME doesn't work properly */ { "movq", 0x0f6f, OP2F, OP_R64_R, OP_RM64_D0_R,AOT_NONE }, { "movq", 0x0f6f, OP2F, OP_R64_R, OP_RM64_D8_R,AOT_NONE }, { "movq", 0x0f6f, OP2F, OP_R64_R, OP_RM64_DW_R,AOT_NONE }, { "movq", 0x0f6f, OP2F, OP_R64_R, OP_RM64_R64_R,AOT_NONE}, #endif /* MOVQ 0x0f7f /r OP2F mm/m64 mm */ { "movq", 0x0f7f, OP2F, OP_RM64_D0_R,OP_R64_R, AOT_NONE }, { "movq", 0x0f7f, OP2F, OP_RM64_D8_R,OP_R64_R, AOT_NONE }, { "movq", 0x0f7f, OP2F, OP_RM64_DW_R,OP_R64_R, AOT_NONE }, #if 1 /* FIXME doesn't work properly */ { "movq", 0x0f7f, OP2F, OP_RM64_R64_R,OP_R64_R, AOT_NONE }, #endif /* FIXME implement */ /* PADDB 0x0ffc /r 2 mm mm/m64 */ #if 1 /* FIXME doesn't work properly */ { "paddb", 0x0ffc, OP2F, OP_R64_R, OP_RM64_D0_R,AOT_NONE }, { "paddb", 0x0ffc, OP2F, OP_R64_R, OP_RM64_D8_R,AOT_NONE }, { "paddb", 0x0ffc, OP2F, OP_R64_R, OP_RM64_DW_R,AOT_NONE }, { "paddb", 0x0ffc, OP2F, OP_R64_R, OP_RM64_R64_R,AOT_NONE}, #endif /* PADDD 0x0ffd /r 2 mm mm/m64 */ #if 1 /* FIXME doesn't work properly */ { "paddd", 0x0ffe, OP2F, OP_R64_R, OP_RM64_D0_R,AOT_NONE }, { "paddd", 0x0ffe, OP2F, OP_R64_R, OP_RM64_D8_R,AOT_NONE }, { "paddd", 0x0ffe, OP2F, OP_R64_R, OP_RM64_DW_R,AOT_NONE }, { "paddd", 0x0ffe, OP2F, OP_R64_R, OP_RM64_R64_R,AOT_NONE}, #endif /* PADDW 0x0ffd /r 2 mm mm/m64 */ #if 1 /* FIXME doesn't work properly */ { "paddw", 0x0ffd, OP2F, OP_R64_R, OP_RM64_D0_R,AOT_NONE }, { "paddw", 0x0ffd, OP2F, OP_R64_R, OP_RM64_D8_R,AOT_NONE }, { "paddw", 0x0ffd, OP2F, OP_R64_R, OP_RM64_DW_R,AOT_NONE }, { "paddw", 0x0ffd, OP2F, OP_R64_R, OP_RM64_R64_R,AOT_NONE}, #endif /* 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 }, { "por", 0x0feb, OP2F, OP_R64_R, OP_RM64_D8_R,AOT_NONE }, { "por", 0x0feb, OP2F, OP_R64_R, OP_RM64_DW_R,AOT_NONE }, { "por", 0x0feb, OP2F, OP_R64_R, OP_RM64_R64_R,AOT_NONE}, #endif /* PUNPCKLBW 0x0f60 /r 2 mm mm/m32 */ /* FIXME implement */ /* PUNPCKLBD 0x0f61 /r 2 mm mm/m32 */ /* FIXME implement */ /* PUNPCKLBQ 0x0f62 /r 2 mm mm/m32 */ /* FIXME implement */ /* PXOR 0x0fef /r 2 mm mm/m64 */ #if 1 /* FIXME doesn't work properly */ { "pxor", 0x0fef, OP2F, OP_R64_R, OP_RM64_D0_R,AOT_NONE }, { "pxor", 0x0fef, OP2F, OP_R64_R, OP_RM64_D8_R,AOT_NONE }, { "pxor", 0x0fef, OP2F, OP_R64_R, OP_RM64_DW_R,AOT_NONE }, { "pxor", 0x0fef, OP2F, OP_R64_R, OP_RM64_R64_R,AOT_NONE}, #endif