Add an x86 configuration file with all MMX instructions. Signed-off-by: Jan Bobek <jan.bo...@gmail.com> --- x86.risu | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 x86.risu
diff --git a/x86.risu b/x86.risu new file mode 100644 index 0000000..f2dd9b0 --- /dev/null +++ b/x86.risu @@ -0,0 +1,96 @@ +############################################################################### +# Copyright (c) 2019 Linaro Limited +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# Jan Bobek - initial implementation +############################################################################### + +# Input file for risugen defining x86 instructions +.mode x86 + +# Data Transfer Instructions +MOVD MMX 00001111 011 d 1110 !emit { modrm(mod => MOD_DIRECT, rm => ~REG_ESP); } +MOVD_mem MMX 00001111 011 d 1110 !emit { modrm(mod => ~MOD_DIRECT); mem(size => 4); } +MOVQ MMX 00001111 011 d 1110 !emit { rex(w => 1); modrm(mod => MOD_DIRECT, rm => ~REG_ESP); } +MOVQ_mem MMX 00001111 011 d 1110 !emit { rex(w => 1); modrm(mod => ~MOD_DIRECT); mem(size => 8); } +MOVQ_mm MMX 00001111 011 d 1111 !emit { modrm(); mem(size => 8); } + +# Arithmetic Instructions +PADDB MMX 00001111 11111100 !emit { modrm(); mem(size => 8); } +PADDW MMX 00001111 11111101 !emit { modrm(); mem(size => 8); } +PADDD MMX 00001111 11111110 !emit { modrm(); mem(size => 8); } +PADDQ MMX 00001111 11010100 !emit { modrm(); mem(size => 8); } +PADDSB MMX 00001111 11101100 !emit { modrm(); mem(size => 8); } +PADDSW MMX 00001111 11101101 !emit { modrm(); mem(size => 8); } +PADDUSB MMX 00001111 11011100 !emit { modrm(); mem(size => 8); } +PADDUSW MMX 00001111 11011101 !emit { modrm(); mem(size => 8); } + +PSUBB MMX 00001111 11111000 !emit { modrm(); mem(size => 8); } +PSUBW MMX 00001111 11111001 !emit { modrm(); mem(size => 8); } +PSUBD MMX 00001111 11111010 !emit { modrm(); mem(size => 8); } +PSUBSB MMX 00001111 11101000 !emit { modrm(); mem(size => 8); } +PSUBSW MMX 00001111 11101001 !emit { modrm(); mem(size => 8); } +PSUBUSB MMX 00001111 11011000 !emit { modrm(); mem(size => 8); } +PSUBUSW MMX 00001111 11011001 !emit { modrm(); mem(size => 8); } + +PMULLW MMX 00001111 11010101 !emit { modrm(); mem(size => 8); } +PMULHW MMX 00001111 11100101 !emit { modrm(); mem(size => 8); } + +PMADDWD MMX 00001111 11110101 !emit { modrm(); mem(size => 8); } + +# Comparison Instructions +PCMPEQB MMX 00001111 01110100 !emit { modrm(); mem(size => 8); } +PCMPEQW MMX 00001111 01110101 !emit { modrm(); mem(size => 8); } +PCMPEQD MMX 00001111 01110110 !emit { modrm(); mem(size => 8); } +PCMPGTB MMX 00001111 01100100 !emit { modrm(); mem(size => 8); } +PCMPGTW MMX 00001111 01100101 !emit { modrm(); mem(size => 8); } +PCMPGTD MMX 00001111 01100110 !emit { modrm(); mem(size => 8); } + +# Logical Instructions +PAND MMX 00001111 11011011 !emit { modrm(); mem(size => 8); } +PANDN MMX 00001111 11011111 !emit { modrm(); mem(size => 8); } +POR MMX 00001111 11101011 !emit { modrm(); mem(size => 8); } +PXOR MMX 00001111 11101111 !emit { modrm(); mem(size => 8); } + +# Shift and Rotate Instructions +PSLLW MMX 00001111 11110001 !emit { modrm(); mem(size => 8); } +PSLLD MMX 00001111 11110010 !emit { modrm(); mem(size => 8); } +PSLLQ MMX 00001111 11110011 !emit { modrm(); mem(size => 8); } + +PSLLW_imm MMX 00001111 01110001 !emit { modrm(mod => MOD_DIRECT, reg => 6); imm(size => 1); } +PSLLD_imm MMX 00001111 01110010 !emit { modrm(mod => MOD_DIRECT, reg => 6); imm(size => 1); } +PSLLQ_imm MMX 00001111 01110011 !emit { modrm(mod => MOD_DIRECT, reg => 6); imm(size => 1); } + +PSRLW MMX 00001111 11010001 !emit { modrm(); mem(size => 8); } +PSRLD MMX 00001111 11010010 !emit { modrm(); mem(size => 8); } +PSRLQ MMX 00001111 11010011 !emit { modrm(); mem(size => 8); } + +PSRLW_imm MMX 00001111 01110001 !emit { modrm(mod => MOD_DIRECT, reg => 2); imm(size => 1); } +PSRLD_imm MMX 00001111 01110010 !emit { modrm(mod => MOD_DIRECT, reg => 2); imm(size => 1); } +PSRLQ_imm MMX 00001111 01110011 !emit { modrm(mod => MOD_DIRECT, reg => 2); imm(size => 1); } + +PSRAW MMX 00001111 11100001 !emit { modrm(); mem(size => 8); } +PSRAD MMX 00001111 11100010 !emit { modrm(); mem(size => 8); } + +PSRAW_imm MMX 00001111 01110001 !emit { modrm(mod => MOD_DIRECT, reg => 4); imm(size => 1); } +PSRAD_imm MMX 00001111 01110010 !emit { modrm(mod => MOD_DIRECT, reg => 4); imm(size => 1); } + +# Shuffle, Unpack, Blend, Insert, Extract, Broadcast, Permute, Scatter Instructions +PACKSSWB MMX 00001111 01100011 !emit { modrm(); mem(size => 8); } +PACKSSDW MMX 00001111 01101011 !emit { modrm(); mem(size => 8); } +PACKUSWB MMX 00001111 01100111 !emit { modrm(); mem(size => 8); } + +PUNPCKHBW MMX 00001111 01101000 !emit { modrm(); mem(size => 8); } +PUNPCKHWD MMX 00001111 01101001 !emit { modrm(); mem(size => 8); } +PUNPCKHDQ MMX 00001111 01101010 !emit { modrm(); mem(size => 8); } + +PUNPCKLBW MMX 00001111 01100000 !emit { modrm(); mem(size => 4); } +PUNPCKLWD MMX 00001111 01100001 !emit { modrm(); mem(size => 4); } +PUNPCKLDQ MMX 00001111 01100010 !emit { modrm(); mem(size => 4); } + +# State Management Instructions +EMMS MMX 00001111 01110111 !emit { } -- 2.20.1