From a6e95ca4a47120b83101ed49a35561e9b5e2ec8d Mon Sep 17 00:00:00 2001 From: David Schleef Date: Fri, 6 Aug 2010 13:42:49 -0700 Subject: [PATCH] remove old style of opcode emulation --- examples/volscale.c | 35 +- orc/orcopcodes.c | 732 +++++++---------------------------- orc/orcprogram.h | 2 - testsuite/compile_opcodes_sys.c | 15 +- testsuite/compile_opcodes_sys_c.c | 5 +- testsuite/compile_opcodes_sys_neon.c | 15 +- 6 files changed, 185 insertions(+), 619 deletions(-) diff --git a/examples/volscale.c b/examples/volscale.c index f60ba9c..2f2eea2 100644 --- a/examples/volscale.c +++ b/examples/volscale.c @@ -84,21 +84,34 @@ sse_register_rules (void) /* calculate the high 32 bits of a 32x16 signed multiply */ static void -mulhslw (OrcOpcodeExecutor *ex, void *user) +emulate_mulhslw (OrcOpcodeExecutor *ex, int offset, int n) { - orc_int32 src, sl, sh, scale; - - scale = ex->src_values[0]; - src = ex->src_values[1]; - - sh = scale >> 16; - sl = scale & 0xffff; - - ex->dest_values[0] = (orc_int32) ((src * sl) >> 16) + (src * sh); + int i; + orc_union32 * ptr0; + const orc_union32 * ptr4; + const orc_int16 * ptr5; + orc_union32 var32; + orc_int16 var33; + orc_union32 var34; + + ptr0 = (orc_union32 *)ex->dest_ptrs[0]; + ptr4 = (orc_union32 *)ex->src_ptrs[0]; + ptr5 = (orc_int16 *)ex->src_ptrs[1]; + + for (i = 0; i < n; i++) { + /* 0: loadb */ + var32 = ptr4[i]; + /* 1: loadb */ + var33 = ptr5[i]; + /* 2: mulsbw */ + var34.i = (var32.i * var33)>>16; + /* 3: storew */ + ptr0[i] = var34; + } } static OrcStaticOpcode opcodes[] = { - { "mulhslw", mulhslw, NULL, 0, { 4 }, { 4, 2 } }, + { "mulhslw", 0, { 4 }, { 4, 2 }, emulate_mulhslw }, { "" } }; diff --git a/orc/orcopcodes.c b/orc/orcopcodes.c index 37daa65..299bf19 100644 --- a/orc/orcopcodes.c +++ b/orc/orcopcodes.c @@ -274,614 +274,176 @@ orc_opcode_find_by_name (const char *name) return NULL; } -static void -convsbw (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = (orc_int8)(ex->src_values[0]); -} - -static void -convubw (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = (orc_uint8)(ex->src_values[0]); -} - -static void -convswl (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = (orc_int16)(ex->src_values[0]); -} - -static void -convuwl (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = (orc_uint16)(ex->src_values[0]); -} - -static void -convwb (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = (orc_int16)(ex->src_values[0]); -} - -static void -convssswb (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = ORC_CLAMP_SB((orc_int16)(ex->src_values[0])); -} - -static void -convsuswb (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = ORC_CLAMP_UB((orc_int16)(ex->src_values[0])); -} - -static void -convusswb (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = MIN((int)(orc_uint16)(ex->src_values[0]), ORC_SB_MAX); -} - -static void -convuuswb (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = MIN((int)(orc_uint16)(ex->src_values[0]), ORC_UB_MAX); -} - -static void -convlw (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = (orc_int32)(ex->src_values[0]); -} - -static void -convssslw (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = ORC_CLAMP_SW((orc_int32)(ex->src_values[0])); -} - -static void -convsuslw (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = ORC_CLAMP_UW((orc_int32)(ex->src_values[0])); -} - -static void -convusslw (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = ORC_CLAMP_SW((orc_uint32)(ex->src_values[0])); -} - -static void -convuuslw (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = ORC_CLAMP_UW((orc_uint32)(ex->src_values[0])); -} - -#define UNARY(name,type,code) \ -static void \ -name (OrcOpcodeExecutor *ex, void *user) \ -{ \ - int a = ex->src_values[0]; \ - ex->dest_values[0] = ( type )( code ); \ -} - -#define BINARY(name,type,code) \ -static void \ -name (OrcOpcodeExecutor *ex, void *user) \ -{ \ - int a = (type) ex->src_values[0]; \ - int b = (type) ex->src_values[1]; \ - ex->dest_values[0] = ( type )( code ); \ -} - -#define UNARY_SB(name,code) UNARY(name, orc_int8, code) -#define BINARY_SB(name,code) BINARY(name, orc_int8, code) -#define BINARY_UB(name,code) BINARY(name, orc_uint8, code) - -#define UNARY_SW(name,code) UNARY(name, orc_int16, code) -#define BINARY_SW(name,code) BINARY(name, orc_int16, code) -#define BINARY_UW(name,code) BINARY(name, orc_uint16, code) - -#define UNARY_SL(name,code) UNARY(name, orc_int32, code) -#define BINARY_SL(name,code) BINARY(name, orc_int32, code) -#define BINARY_UL(name,code) BINARY(name, orc_uint32, code) - -UNARY_SB(absb, (a<0)?-a:a) -BINARY_SB(addb, a + b) -BINARY_SB(addssb, ORC_CLAMP_SB(a + b)) -BINARY_UB(addusb, ORC_CLAMP_UB(a + b)) -BINARY_SB(andb, a & b) -BINARY_SB(andnb, (~a) & b) -BINARY_SB(avgsb, (a + b + 1)>>1) -BINARY_UB(avgub, (a + b + 1)>>1) -BINARY_SB(cmpeqb, (a == b) ? (~0) : 0) -BINARY_SB(cmpgtsb, (a > b) ? (~0) : 0) -UNARY_SB(copyb, a) -UNARY_SB(loadb, a) -UNARY_SB(loadoffb, a) -UNARY_SB(loadupdb, a) -UNARY_SB(loadupib, a) -UNARY_SB(loadpb, a) -BINARY_SB(maxsb, (a > b) ? a : b) -BINARY_UB(maxub, (a > b) ? a : b) -BINARY_SB(minsb, (a < b) ? a : b) -BINARY_UB(minub, (a < b) ? a : b) -BINARY_SB(mullb, (a * b) & 0xff) -BINARY_SB(mulhsb, (a * b) >> 8) -BINARY_UB(mulhub, (a * b) >> 8) -BINARY_SB(orb, a | b) -BINARY_SB(shlb, a << b) -BINARY_SB(shrsb, a >> b) -BINARY_UB(shrub, (a) >> b) -UNARY_SB(signb, ORC_CLAMP(a,-1,1)) -UNARY_SB(storeb, a) -BINARY_SB(subb, a - b) -BINARY_SB(subssb, ORC_CLAMP_SB(a - b)) -BINARY_UB(subusb, ORC_CLAMP_UB(a - b)) -BINARY_SB(xorb, a ^ b) - -UNARY_SW(absw, (a<0)?-a:a) -BINARY_SW(addw, a + b) -BINARY_SW(addssw, ORC_CLAMP_SW(a + b)) -BINARY_UW(addusw, ORC_CLAMP_UW(a + b)) -BINARY_SW(andw, a & b) -BINARY_SW(andnw, (~a) & b) -BINARY_SW(avgsw, (a + b + 1)>>1) -BINARY_UW(avguw, (a + b + 1)>>1) -BINARY_SW(cmpeqw, (a == b) ? (~0) : 0) -BINARY_SW(cmpgtsw, (a > b) ? (~0) : 0) -UNARY_SW(copyw, a) -UNARY_SW(loadw, a) -UNARY_SW(loadoffw, a) -UNARY_SW(loadpw, a) -BINARY_SW(maxsw, (a > b) ? a : b) -BINARY_UW(maxuw, (a > b) ? a : b) -BINARY_SW(minsw, (a < b) ? a : b) -BINARY_UW(minuw, (a < b) ? a : b) -BINARY_SW(mullw, (a * b) & 0xffff) -BINARY_SW(mulhsw, (a * b) >> 16) -BINARY_UW(mulhuw, (a * b) >> 16) -BINARY_SW(orw, a | b) -BINARY_SW(shlw, a << b) -BINARY_SW(shrsw, a >> b) -BINARY_UW(shruw, a >> b) -UNARY_SW(signw, ORC_CLAMP(a,-1,1)) -UNARY_SW(storew, a) -BINARY_SW(subw, a - b) -BINARY_SW(subssw, ORC_CLAMP_SW(a - b)) -BINARY_UW(subusw, ORC_CLAMP_UW(a - b)) -BINARY_SW(xorw, a ^ b) - -UNARY_SL(absl, (a<0)?-a:a) -BINARY_SL(addl, a + b) -BINARY_SL(addssl, ORC_CLAMP_SL((orc_int64)a + (orc_int64)b)) -BINARY_UL(addusl, ORC_CLAMP_UL((orc_uint64)(orc_uint32)a + (orc_uint64)(orc_uint32)b)) -BINARY_SL(andl, a & b) -BINARY_SL(andnl, (~a) & b) -BINARY_SL(avgsl, ((orc_int64)a + (orc_int64)b + 1)>>1) -BINARY_UL(avgul, ((orc_uint64)(orc_uint32)a + (orc_uint64)(orc_uint32)b + 1)>>1) -BINARY_SL(cmpeql, (a == b) ? (~0) : 0) -BINARY_SL(cmpgtsl, (a > b) ? (~0) : 0) -UNARY_SL(copyl, a) -UNARY_SL(loadl, a) -UNARY_SL(loadoffl, a) -UNARY_SL(loadpl, a) -BINARY_SL(maxsl, (a > b) ? a : b) -BINARY_UL(maxul, ((orc_uint32)a > (orc_uint32)b) ? a : b) -BINARY_SL(minsl, (a < b) ? a : b) -BINARY_UL(minul, ((orc_uint32)a < (orc_uint32)b) ? a : b) -BINARY_SL(mulll, (a * b) & 0xffffffff) -BINARY_SL(mulhsl, ((orc_int64)a * (orc_int64)b) >> 32) -BINARY_UL(mulhul, ((orc_uint64)(orc_uint32)a * (orc_uint64)(orc_uint32)b) >> 32) -BINARY_SL(orl, a | b) -BINARY_SL(shll, a << b) -BINARY_SL(shrsl, a >> b) -BINARY_UL(shrul, ((orc_uint32)a) >> b) -UNARY_SL(signl, ORC_CLAMP(a,-1,1)) -UNARY_SL(storel, a) -BINARY_SL(subl, a - b) -BINARY_SL(subssl, ORC_CLAMP_SL((orc_int64)a - (orc_int64)b)) -BINARY_UL(subusl, (((orc_uint32)a) < ((orc_uint32)b)) ? 0 : a - b) -BINARY_SL(xorl, a ^ b) - - -#define MUL(name, type1, type2) \ -static void \ -name (OrcOpcodeExecutor *ex, void *user) \ -{ \ - ex->dest_values[0] = ((type2)(type1)ex->src_values[0]) * \ - ((type2)(type1)ex->src_values[1]); \ -} - -MUL(mulsbw, orc_int8, orc_int16) -MUL(mulubw, orc_uint8, orc_uint16) -MUL(mulswl, orc_int16, orc_int32) -MUL(muluwl, orc_uint16, orc_uint32) -#ifdef ENABLE_INT64 -MUL(mulslq, orc_int32, orc_int64) -MUL(mululq, orc_uint32, orc_uint64) -#endif - -#define ACC(name, type1) \ -static void \ -name (OrcOpcodeExecutor *ex, void *user) \ -{ \ - ex->dest_values[0] = ((type1)ex->src_values[0]); \ -} - -ACC(accw, orc_int16); -ACC(accl, orc_int32); - -static void -swapw (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = ((ex->src_values[0]&0xff)<<8)| - ((ex->src_values[0]&0xff00)>>8); -} - -static void -swapl (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = ((ex->src_values[0]&0xff)<<24)| - ((ex->src_values[0]&0xff00)<<8)| - ((ex->src_values[0]&0xff0000)>>8)| - ((ex->src_values[0]&0xff000000)>>24); -} - -static void -select0lw (OrcOpcodeExecutor *ex, void *user) -{ -#if WORDS_BIGENDIAN - ex->dest_values[0] = (ex->src_values[0]>>16)&0xffff; -#else - ex->dest_values[0] = ex->src_values[0]&0xffff; -#endif -} - -static void -select1lw (OrcOpcodeExecutor *ex, void *user) -{ -#if WORDS_BIGENDIAN - ex->dest_values[0] = ex->src_values[0]&0xffff; -#else - ex->dest_values[0] = (ex->src_values[0]>>16)&0xffff; -#endif -} - -static void -select0wb (OrcOpcodeExecutor *ex, void *user) -{ -#if WORDS_BIGENDIAN - ex->dest_values[0] = (ex->src_values[0]>>8)&0xff; -#else - ex->dest_values[0] = ex->src_values[0]&0xff; -#endif -} - -static void -select1wb (OrcOpcodeExecutor *ex, void *user) -{ -#if WORDS_BIGENDIAN - ex->dest_values[0] = ex->src_values[0]&0xff; -#else - ex->dest_values[0] = (ex->src_values[0]>>8)&0xff; -#endif -} - -static void -splitlw (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = (ex->src_values[0] >> 16) & 0xffff; - ex->dest_values[1] = ex->src_values[0] & 0xffff; -} - -static void -splitwb (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = (ex->src_values[0] >> 8) & 0xff; - ex->dest_values[1] = ex->src_values[0] & 0xff; -} - -static void -mergewl (OrcOpcodeExecutor *ex, void *user) -{ - union { - orc_uint16 u16[2]; - orc_uint32 u32; - } val; - val.u16[0] = ex->src_values[0]; - val.u16[1] = ex->src_values[1]; - ex->dest_values[0] = val.u32; -} - -static void -mergebw (OrcOpcodeExecutor *ex, void *user) -{ - union { - orc_uint8 u8[2]; - orc_uint16 u16; - } val; - val.u8[0] = ex->src_values[0]; - val.u8[1] = ex->src_values[1]; - ex->dest_values[0] = val.u16; -} - -static void -accsadubl (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = abs((int)((orc_uint8)ex->src_values[0]) - - (int)((orc_uint8)ex->src_values[1])); -} - -/* float ops */ - -static float -ORC_FLOAT_READ(void *addr) -{ - union { - float f; - unsigned int i; - } x; - x.i = *(unsigned int *)(addr); - return x.f; -} - -static void -ORC_FLOAT_WRITE(void *addr, float value) -{ - union { - float f; - unsigned int i; - } x; - x.f = value; - *(unsigned int *)(addr) = x.i; -} - -#if 0 -/* Oh noes! Aliasing rules! */ -#define ORC_FLOAT_READ(addr) (*(float *)(addr)) -#define ORC_FLOAT_WRITE(addr,value) do{ (*(float *)(addr)) = (value); }while(0 -#endif - -#define UNARY_F(name,code) \ -static void \ -name (OrcOpcodeExecutor *ex, void *user) \ -{ \ - float a = ORC_FLOAT_READ(&ex->src_values[0]); \ - ORC_FLOAT_WRITE(&ex->dest_values[0], code ); \ -} - -#define BINARY_F(name,code) \ -static void \ -name (OrcOpcodeExecutor *ex, void *user) \ -{ \ - void *pa = &ex->src_values[0]; \ - void *pb = &ex->src_values[1]; \ - float a = ORC_FLOAT_READ(pa); \ - float b = ORC_FLOAT_READ(pb); \ - ORC_FLOAT_WRITE(&ex->dest_values[0], code ); \ -} - -#define BINARY_FL(name,code) \ -static void \ -name (OrcOpcodeExecutor *ex, void *user) \ -{ \ - float a = ORC_FLOAT_READ(&ex->src_values[0]); \ - float b = ORC_FLOAT_READ(&ex->src_values[1]); \ - ex->dest_values[0] = code ; \ -} - -#define MIN_NONDENORMAL (1.1754944909521339405e-38) -#define FLUSH_DENORMALS -#ifdef FLUSH_DENORMALS -#define ORC_DENORMAL(x) \ - (((x) > -MIN_NONDENORMAL && (x) < MIN_NONDENORMAL) ? ((x)<0 ? (-0.0f) : (0.0f)) : (x)) -#else -#define ORC_DENORMAL(x) (x) -#endif - -BINARY_F(addf, ORC_DENORMAL(ORC_DENORMAL(a) + ORC_DENORMAL(b))) -BINARY_F(subf, ORC_DENORMAL(ORC_DENORMAL(a) - ORC_DENORMAL(b))) -BINARY_F(mulf, ORC_DENORMAL(ORC_DENORMAL(a) * ORC_DENORMAL(b))) -BINARY_F(divf, ORC_DENORMAL(ORC_DENORMAL(a) / ORC_DENORMAL(b))) -UNARY_F(orc_sqrtf, sqrt(ORC_DENORMAL(a)) ) -#if 1 -/* NEON style maxf/minf */ -BINARY_F(maxf, isnan(a) ? a : isnan(b) ? b : (a>b) ? ORC_DENORMAL(a) : ORC_DENORMAL(b)) -BINARY_F(minf, isnan(a) ? a : isnan(b) ? b : (ab) ? ORC_DENORMAL(a) : ORC_DENORMAL(b)) -BINARY_F(minf, (a ORC_DENORMAL(a))) ? (~0) : 0) -BINARY_FL(cmplef, ((ORC_DENORMAL(a) <= ORC_DENORMAL(b)) && (ORC_DENORMAL(b) >= ORC_DENORMAL(a))) ? (~0) : 0) - -static void -convfl (OrcOpcodeExecutor *ex, void *user) -{ - ex->dest_values[0] = ORC_FLOAT_READ(&ex->src_values[0]); -} - -static void -convlf (OrcOpcodeExecutor *ex, void *user) -{ - ORC_FLOAT_WRITE(&ex->dest_values[0], ex->src_values[0]); -} - #include "orc/orcemulateopcodes.h" static OrcStaticOpcode opcodes[] = { /* byte ops */ - { "absb", absb, NULL, 0, { 1 }, { 1 }, emulate_absb }, - { "addb", addb, NULL, 0, { 1 }, { 1, 1 }, emulate_addb }, - { "addssb", addssb, NULL, 0, { 1 }, { 1, 1 }, emulate_addssb }, - { "addusb", addusb, NULL, 0, { 1 }, { 1, 1 }, emulate_addusb }, - { "andb", andb, NULL, 0, { 1 }, { 1, 1 }, emulate_andb }, - { "andnb", andnb, NULL, 0, { 1 }, { 1, 1 }, emulate_andnb }, - { "avgsb", avgsb, NULL, 0, { 1 }, { 1, 1 }, emulate_avgsb }, - { "avgub", avgub, NULL, 0, { 1 }, { 1, 1 }, emulate_avgub }, - { "cmpeqb", cmpeqb, NULL, 0, { 1 }, { 1, 1 }, emulate_cmpeqb }, - { "cmpgtsb", cmpgtsb, NULL, 0, { 1 }, { 1, 1 }, emulate_cmpgtsb }, - { "copyb", copyb, NULL, 0, { 1 }, { 1 }, emulate_copyb }, - { "loadb", loadb, NULL, ORC_STATIC_OPCODE_LOAD, { 1 }, { 1 }, emulate_loadb }, - { "loadoffb", loadoffb, NULL, ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_SCALAR, { 1 }, { 1, 4 }, emulate_loadoffb }, - { "loadupdb", loadupdb, NULL, ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_ITERATOR, { 1 }, { 1 }, emulate_loadupdb }, - { "loadupib", loadupib, NULL, ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_ITERATOR, { 1 }, { 1 }, emulate_loadupib }, - { "loadpb", loadpb, NULL, ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_SCALAR|ORC_STATIC_OPCODE_INVARIANT, { 1 }, { 1 }, emulate_loadpb }, - { "maxsb", maxsb, NULL, 0, { 1 }, { 1, 1 }, emulate_maxsb }, - { "maxub", maxub, NULL, 0, { 1 }, { 1, 1 }, emulate_maxub }, - { "minsb", minsb, NULL, 0, { 1 }, { 1, 1 }, emulate_minsb }, - { "minub", minub, NULL, 0, { 1 }, { 1, 1 }, emulate_minub }, - { "mullb", mullb, NULL, 0, { 1 }, { 1, 1 }, emulate_mullb }, - { "mulhsb", mulhsb, NULL, 0, { 1 }, { 1, 1 }, emulate_mulhsb }, - { "mulhub", mulhub, NULL, 0, { 1 }, { 1, 1 }, emulate_mulhub }, - { "orb", orb, NULL, 0, { 1 }, { 1, 1 }, emulate_orb }, - { "shlb", shlb, NULL, ORC_STATIC_OPCODE_SCALAR, { 1 }, { 1, 1 }, emulate_shlb }, - { "shrsb", shrsb, NULL, ORC_STATIC_OPCODE_SCALAR, { 1 }, { 1, 1 }, emulate_shrsb }, - { "shrub", shrub, NULL, ORC_STATIC_OPCODE_SCALAR, { 1 }, { 1, 1 }, emulate_shrub }, - { "signb", signb, NULL, 0, { 1 }, { 1 }, emulate_signb }, - { "storeb", storeb, NULL, ORC_STATIC_OPCODE_STORE, { 1 }, { 1 }, emulate_storeb }, - { "subb", subb, NULL, 0, { 1 }, { 1, 1 }, emulate_subb }, - { "subssb", subssb, NULL, 0, { 1 }, { 1, 1 }, emulate_subssb }, - { "subusb", subusb, NULL, 0, { 1 }, { 1, 1 }, emulate_subusb }, - { "xorb", xorb, NULL, 0, { 1 }, { 1, 1 }, emulate_xorb }, + { "absb", 0, { 1 }, { 1 }, emulate_absb }, + { "addb", 0, { 1 }, { 1, 1 }, emulate_addb }, + { "addssb", 0, { 1 }, { 1, 1 }, emulate_addssb }, + { "addusb", 0, { 1 }, { 1, 1 }, emulate_addusb }, + { "andb", 0, { 1 }, { 1, 1 }, emulate_andb }, + { "andnb", 0, { 1 }, { 1, 1 }, emulate_andnb }, + { "avgsb", 0, { 1 }, { 1, 1 }, emulate_avgsb }, + { "avgub", 0, { 1 }, { 1, 1 }, emulate_avgub }, + { "cmpeqb", 0, { 1 }, { 1, 1 }, emulate_cmpeqb }, + { "cmpgtsb", 0, { 1 }, { 1, 1 }, emulate_cmpgtsb }, + { "copyb", 0, { 1 }, { 1 }, emulate_copyb }, + { "loadb", ORC_STATIC_OPCODE_LOAD, { 1 }, { 1 }, emulate_loadb }, + { "loadoffb", ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_SCALAR, { 1 }, { 1, 4 }, emulate_loadoffb }, + { "loadupdb", ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_ITERATOR, { 1 }, { 1 }, emulate_loadupdb }, + { "loadupib", ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_ITERATOR, { 1 }, { 1 }, emulate_loadupib }, + { "loadpb", ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_SCALAR|ORC_STATIC_OPCODE_INVARIANT, { 1 }, { 1 }, emulate_loadpb }, + { "maxsb", 0, { 1 }, { 1, 1 }, emulate_maxsb }, + { "maxub", 0, { 1 }, { 1, 1 }, emulate_maxub }, + { "minsb", 0, { 1 }, { 1, 1 }, emulate_minsb }, + { "minub", 0, { 1 }, { 1, 1 }, emulate_minub }, + { "mullb", 0, { 1 }, { 1, 1 }, emulate_mullb }, + { "mulhsb", 0, { 1 }, { 1, 1 }, emulate_mulhsb }, + { "mulhub", 0, { 1 }, { 1, 1 }, emulate_mulhub }, + { "orb", 0, { 1 }, { 1, 1 }, emulate_orb }, + { "shlb", ORC_STATIC_OPCODE_SCALAR, { 1 }, { 1, 1 }, emulate_shlb }, + { "shrsb", ORC_STATIC_OPCODE_SCALAR, { 1 }, { 1, 1 }, emulate_shrsb }, + { "shrub", ORC_STATIC_OPCODE_SCALAR, { 1 }, { 1, 1 }, emulate_shrub }, + { "signb", 0, { 1 }, { 1 }, emulate_signb }, + { "storeb", ORC_STATIC_OPCODE_STORE, { 1 }, { 1 }, emulate_storeb }, + { "subb", 0, { 1 }, { 1, 1 }, emulate_subb }, + { "subssb", 0, { 1 }, { 1, 1 }, emulate_subssb }, + { "subusb", 0, { 1 }, { 1, 1 }, emulate_subusb }, + { "xorb", 0, { 1 }, { 1, 1 }, emulate_xorb }, /* word ops */ - { "absw", absw, NULL, 0, { 2 }, { 2 }, emulate_absw }, - { "addw", addw, NULL, 0, { 2 }, { 2, 2 }, emulate_addw }, - { "addssw", addssw, NULL, 0, { 2 }, { 2, 2 }, emulate_addssw }, - { "addusw", addusw, NULL, 0, { 2 }, { 2, 2 }, emulate_addusw }, - { "andw", andw, NULL, 0, { 2 }, { 2, 2 }, emulate_andw }, - { "andnw", andnw, NULL, 0, { 2 }, { 2, 2 }, emulate_andnw }, - { "avgsw", avgsw, NULL, 0, { 2 }, { 2, 2 }, emulate_avgsw }, - { "avguw", avguw, NULL, 0, { 2 }, { 2, 2 }, emulate_avguw }, - { "cmpeqw", cmpeqw, NULL, 0, { 2 }, { 2, 2 }, emulate_cmpeqw }, - { "cmpgtsw", cmpgtsw, NULL, 0, { 2 }, { 2, 2 }, emulate_cmpgtsw }, - { "copyw", copyw, NULL, 0, { 2 }, { 2 }, emulate_copyw }, - { "loadw", loadw, NULL, ORC_STATIC_OPCODE_LOAD, { 2 }, { 2 }, emulate_loadw }, - { "loadoffw", loadoffw, NULL, ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_SCALAR, { 2 }, { 2, 4 }, emulate_loadoffw }, - { "loadpw", loadpw, NULL, ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_SCALAR|ORC_STATIC_OPCODE_INVARIANT, { 2 }, { 2 }, emulate_loadpw }, - { "maxsw", maxsw, NULL, 0, { 2 }, { 2, 2 }, emulate_maxsw }, - { "maxuw", maxuw, NULL, 0, { 2 }, { 2, 2 }, emulate_maxuw }, - { "minsw", minsw, NULL, 0, { 2 }, { 2, 2 }, emulate_minsw }, - { "minuw", minuw, NULL, 0, { 2 }, { 2, 2 }, emulate_minuw }, - { "mullw", mullw, NULL, 0, { 2 }, { 2, 2 }, emulate_mullw }, - { "mulhsw", mulhsw, NULL, 0, { 2 }, { 2, 2 }, emulate_mulhsw }, - { "mulhuw", mulhuw, NULL, 0, { 2 }, { 2, 2 }, emulate_mulhuw }, - { "orw", orw, NULL, 0, { 2 }, { 2, 2 }, emulate_orw }, - { "shlw", shlw, NULL, ORC_STATIC_OPCODE_SCALAR, { 2 }, { 2, 2 }, emulate_shlw }, - { "shrsw", shrsw, NULL, ORC_STATIC_OPCODE_SCALAR, { 2 }, { 2, 2 }, emulate_shrsw }, - { "shruw", shruw, NULL, ORC_STATIC_OPCODE_SCALAR, { 2 }, { 2, 2 }, emulate_shruw }, - { "signw", signw, NULL, 0, { 2 }, { 2 }, emulate_signw }, - { "storew", storew, NULL, ORC_STATIC_OPCODE_STORE, { 2 }, { 2 }, emulate_storew }, - { "subw", subw, NULL, 0, { 2 }, { 2, 2 }, emulate_subw }, - { "subssw", subssw, NULL, 0, { 2 }, { 2, 2 }, emulate_subssw }, - { "subusw", subusw, NULL, 0, { 2 }, { 2, 2 }, emulate_subusw }, - { "xorw", xorw, NULL, 0, { 2 }, { 2, 2 }, emulate_xorw }, + { "absw", 0, { 2 }, { 2 }, emulate_absw }, + { "addw", 0, { 2 }, { 2, 2 }, emulate_addw }, + { "addssw", 0, { 2 }, { 2, 2 }, emulate_addssw }, + { "addusw", 0, { 2 }, { 2, 2 }, emulate_addusw }, + { "andw", 0, { 2 }, { 2, 2 }, emulate_andw }, + { "andnw", 0, { 2 }, { 2, 2 }, emulate_andnw }, + { "avgsw", 0, { 2 }, { 2, 2 }, emulate_avgsw }, + { "avguw", 0, { 2 }, { 2, 2 }, emulate_avguw }, + { "cmpeqw", 0, { 2 }, { 2, 2 }, emulate_cmpeqw }, + { "cmpgtsw", 0, { 2 }, { 2, 2 }, emulate_cmpgtsw }, + { "copyw", 0, { 2 }, { 2 }, emulate_copyw }, + { "loadw", ORC_STATIC_OPCODE_LOAD, { 2 }, { 2 }, emulate_loadw }, + { "loadoffw", ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_SCALAR, { 2 }, { 2, 4 }, emulate_loadoffw }, + { "loadpw", ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_SCALAR|ORC_STATIC_OPCODE_INVARIANT, { 2 }, { 2 }, emulate_loadpw }, + { "maxsw", 0, { 2 }, { 2, 2 }, emulate_maxsw }, + { "maxuw", 0, { 2 }, { 2, 2 }, emulate_maxuw }, + { "minsw", 0, { 2 }, { 2, 2 }, emulate_minsw }, + { "minuw", 0, { 2 }, { 2, 2 }, emulate_minuw }, + { "mullw", 0, { 2 }, { 2, 2 }, emulate_mullw }, + { "mulhsw", 0, { 2 }, { 2, 2 }, emulate_mulhsw }, + { "mulhuw", 0, { 2 }, { 2, 2 }, emulate_mulhuw }, + { "orw", 0, { 2 }, { 2, 2 }, emulate_orw }, + { "shlw", ORC_STATIC_OPCODE_SCALAR, { 2 }, { 2, 2 }, emulate_shlw }, + { "shrsw", ORC_STATIC_OPCODE_SCALAR, { 2 }, { 2, 2 }, emulate_shrsw }, + { "shruw", ORC_STATIC_OPCODE_SCALAR, { 2 }, { 2, 2 }, emulate_shruw }, + { "signw", 0, { 2 }, { 2 }, emulate_signw }, + { "storew", ORC_STATIC_OPCODE_STORE, { 2 }, { 2 }, emulate_storew }, + { "subw", 0, { 2 }, { 2, 2 }, emulate_subw }, + { "subssw", 0, { 2 }, { 2, 2 }, emulate_subssw }, + { "subusw", 0, { 2 }, { 2, 2 }, emulate_subusw }, + { "xorw", 0, { 2 }, { 2, 2 }, emulate_xorw }, /* long ops */ - { "absl", absl, NULL, 0, { 4 }, { 4 }, emulate_absl }, - { "addl", addl, NULL, 0, { 4 }, { 4, 4 }, emulate_addl }, - { "addssl", addssl, NULL, 0, { 4 }, { 4, 4 }, emulate_addssl }, - { "addusl", addusl, NULL, 0, { 4 }, { 4, 4 }, emulate_addusl }, - { "andl", andl, NULL, 0, { 4 }, { 4, 4 }, emulate_andl }, - { "andnl", andnl, NULL, 0, { 4 }, { 4, 4 }, emulate_andnl }, - { "avgsl", avgsl, NULL, 0, { 4 }, { 4, 4 }, emulate_avgsl }, - { "avgul", avgul, NULL, 0, { 4 }, { 4, 4 }, emulate_avgul }, - { "cmpeql", cmpeql, NULL, 0, { 4 }, { 4, 4 }, emulate_cmpeql }, - { "cmpgtsl", cmpgtsl, NULL, 0, { 4 }, { 4, 4 }, emulate_cmpgtsl }, - { "copyl", copyl, NULL, 0, { 4 }, { 4 }, emulate_copyl }, - { "loadl", loadl, NULL, ORC_STATIC_OPCODE_LOAD, { 4 }, { 4 }, emulate_loadl }, - { "loadoffl", loadoffl, NULL, ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_SCALAR, { 4 }, { 4, 4 }, emulate_loadoffl }, - { "loadpl", loadpl, NULL, ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_SCALAR|ORC_STATIC_OPCODE_INVARIANT, { 4 }, { 4 }, emulate_loadpl }, - { "maxsl", maxsl, NULL, 0, { 4 }, { 4, 4 }, emulate_maxsl }, - { "maxul", maxul, NULL, 0, { 4 }, { 4, 4 }, emulate_maxul }, - { "minsl", minsl, NULL, 0, { 4 }, { 4, 4 }, emulate_minsl }, - { "minul", minul, NULL, 0, { 4 }, { 4, 4 }, emulate_minul }, - { "mulll", mulll, NULL, 0, { 4 }, { 4, 4 }, emulate_mulll }, - { "mulhsl", mulhsl, NULL, 0, { 4 }, { 4, 4 }, emulate_mulhsl }, - { "mulhul", mulhul, NULL, 0, { 4 }, { 4, 4 }, emulate_mulhul }, - { "orl", orl, NULL, 0, { 4 }, { 4, 4 }, emulate_orl }, - { "shll", shll, NULL, ORC_STATIC_OPCODE_SCALAR, { 4 }, { 4, 4 }, emulate_shll }, - { "shrsl", shrsl, NULL, ORC_STATIC_OPCODE_SCALAR, { 4 }, { 4, 4 }, emulate_shrsl }, - { "shrul", shrul, NULL, ORC_STATIC_OPCODE_SCALAR, { 4 }, { 4, 4 }, emulate_shrul }, - { "signl", signl, NULL, 0, { 4 }, { 4 }, emulate_signl }, - { "storel", storel, NULL, ORC_STATIC_OPCODE_STORE, { 4 }, { 4 }, emulate_storel }, - { "subl", subl, NULL, 0, { 4 }, { 4, 4 }, emulate_subl }, - { "subssl", subssl, NULL, 0, { 4 }, { 4, 4 }, emulate_subssl }, - { "subusl", subusl, NULL, 0, { 4 }, { 4, 4 }, emulate_subusl }, - { "xorl", xorl, NULL, 0, { 4 }, { 4, 4 }, emulate_xorl }, - - { "convsbw", convsbw, NULL, 0, { 2 }, { 1 }, emulate_convsbw }, - { "convubw", convubw, NULL, 0, { 2 }, { 1 }, emulate_convubw }, - { "convswl", convswl, NULL, 0, { 4 }, { 2 }, emulate_convswl }, - { "convuwl", convuwl, NULL, 0, { 4 }, { 2 }, emulate_convuwl }, + { "absl", 0, { 4 }, { 4 }, emulate_absl }, + { "addl", 0, { 4 }, { 4, 4 }, emulate_addl }, + { "addssl", 0, { 4 }, { 4, 4 }, emulate_addssl }, + { "addusl", 0, { 4 }, { 4, 4 }, emulate_addusl }, + { "andl", 0, { 4 }, { 4, 4 }, emulate_andl }, + { "andnl", 0, { 4 }, { 4, 4 }, emulate_andnl }, + { "avgsl", 0, { 4 }, { 4, 4 }, emulate_avgsl }, + { "avgul", 0, { 4 }, { 4, 4 }, emulate_avgul }, + { "cmpeql", 0, { 4 }, { 4, 4 }, emulate_cmpeql }, + { "cmpgtsl", 0, { 4 }, { 4, 4 }, emulate_cmpgtsl }, + { "copyl", 0, { 4 }, { 4 }, emulate_copyl }, + { "loadl", ORC_STATIC_OPCODE_LOAD, { 4 }, { 4 }, emulate_loadl }, + { "loadoffl", ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_SCALAR, { 4 }, { 4, 4 }, emulate_loadoffl }, + { "loadpl", ORC_STATIC_OPCODE_LOAD|ORC_STATIC_OPCODE_SCALAR|ORC_STATIC_OPCODE_INVARIANT, { 4 }, { 4 }, emulate_loadpl }, + { "maxsl", 0, { 4 }, { 4, 4 }, emulate_maxsl }, + { "maxul", 0, { 4 }, { 4, 4 }, emulate_maxul }, + { "minsl", 0, { 4 }, { 4, 4 }, emulate_minsl }, + { "minul", 0, { 4 }, { 4, 4 }, emulate_minul }, + { "mulll", 0, { 4 }, { 4, 4 }, emulate_mulll }, + { "mulhsl", 0, { 4 }, { 4, 4 }, emulate_mulhsl }, + { "mulhul", 0, { 4 }, { 4, 4 }, emulate_mulhul }, + { "orl", 0, { 4 }, { 4, 4 }, emulate_orl }, + { "shll", ORC_STATIC_OPCODE_SCALAR, { 4 }, { 4, 4 }, emulate_shll }, + { "shrsl", ORC_STATIC_OPCODE_SCALAR, { 4 }, { 4, 4 }, emulate_shrsl }, + { "shrul", ORC_STATIC_OPCODE_SCALAR, { 4 }, { 4, 4 }, emulate_shrul }, + { "signl", 0, { 4 }, { 4 }, emulate_signl }, + { "storel", ORC_STATIC_OPCODE_STORE, { 4 }, { 4 }, emulate_storel }, + { "subl", 0, { 4 }, { 4, 4 }, emulate_subl }, + { "subssl", 0, { 4 }, { 4, 4 }, emulate_subssl }, + { "subusl", 0, { 4 }, { 4, 4 }, emulate_subusl }, + { "xorl", 0, { 4 }, { 4, 4 }, emulate_xorl }, + + { "convsbw", 0, { 2 }, { 1 }, emulate_convsbw }, + { "convubw", 0, { 2 }, { 1 }, emulate_convubw }, + { "convswl", 0, { 4 }, { 2 }, emulate_convswl }, + { "convuwl", 0, { 4 }, { 2 }, emulate_convuwl }, #ifdef ENABLE_64BIT - { "convslq", convslq, NULL, 0, { 8 }, { 4 }, emulate_convslq }, - { "convulq", convulq, NULL, 0, { 8 }, { 4 }, emulate_convulq }, + { "convslq", 0, { 8 }, { 4 }, emulate_convslq }, + { "convulq", 0, { 8 }, { 4 }, emulate_convulq }, #endif - { "convwb", convwb, NULL, 0, { 1 }, { 2 }, emulate_convwb }, - { "convssswb", convssswb, NULL, 0, { 1 }, { 2 }, emulate_convssswb }, - { "convsuswb", convsuswb, NULL, 0, { 1 }, { 2 }, emulate_convsuswb }, - { "convusswb", convusswb, NULL, 0, { 1 }, { 2 }, emulate_convusswb }, - { "convuuswb", convuuswb, NULL, 0, { 1 }, { 2 }, emulate_convuuswb }, + { "convwb", 0, { 1 }, { 2 }, emulate_convwb }, + { "convssswb", 0, { 1 }, { 2 }, emulate_convssswb }, + { "convsuswb", 0, { 1 }, { 2 }, emulate_convsuswb }, + { "convusswb", 0, { 1 }, { 2 }, emulate_convusswb }, + { "convuuswb", 0, { 1 }, { 2 }, emulate_convuuswb }, - { "convlw", convlw, NULL, 0, { 2 }, { 4 }, emulate_convlw }, - { "convssslw", convssslw, NULL, 0, { 2 }, { 4 }, emulate_convssslw }, - { "convsuslw", convsuslw, NULL, 0, { 2 }, { 4 }, emulate_convsuslw }, - { "convusslw", convusslw, NULL, 0, { 2 }, { 4 }, emulate_convusslw }, - { "convuuslw", convuuslw, NULL, 0, { 2 }, { 4 }, emulate_convuuslw }, + { "convlw", 0, { 2 }, { 4 }, emulate_convlw }, + { "convssslw", 0, { 2 }, { 4 }, emulate_convssslw }, + { "convsuslw", 0, { 2 }, { 4 }, emulate_convsuslw }, + { "convusslw", 0, { 2 }, { 4 }, emulate_convusslw }, + { "convuuslw", 0, { 2 }, { 4 }, emulate_convuuslw }, #ifdef ENABLE_64BIT - { "convql", convql, NULL, 0, { 4 }, { 8 }, emulate_convql }, - { "convssql", convssql, NULL, 0, { 4 }, { 8 }, emulate_convssql }, - { "convusql", convusql, NULL, 0, { 4 }, { 8 }, emulate_convusql }, + { "convql", 0, { 4 }, { 8 }, emulate_convql }, + { "convssql", 0, { 4 }, { 8 }, emulate_convssql }, + { "convusql", 0, { 4 }, { 8 }, emulate_convusql }, #endif - { "mulsbw", mulsbw, NULL, 0, { 2 }, { 1, 1 }, emulate_mulsbw }, - { "mulubw", mulubw, NULL, 0, { 2 }, { 1, 1 }, emulate_mulubw }, - { "mulswl", mulswl, NULL, 0, { 4 }, { 2, 2 }, emulate_mulswl }, - { "muluwl", muluwl, NULL, 0, { 4 }, { 2, 2 }, emulate_muluwl }, + { "mulsbw", 0, { 2 }, { 1, 1 }, emulate_mulsbw }, + { "mulubw", 0, { 2 }, { 1, 1 }, emulate_mulubw }, + { "mulswl", 0, { 4 }, { 2, 2 }, emulate_mulswl }, + { "muluwl", 0, { 4 }, { 2, 2 }, emulate_muluwl }, #ifdef ENABLE_64BIT - { "mulslq", mulslq, NULL, 0, { 8 }, { 4, 4 }, emulate_mulslq }, - { "mululq", mululq, NULL, 0, { 8 }, { 4, 4 }, emulate_mululq }, + { "mulslq", 0, { 8 }, { 4, 4 }, emulate_mulslq }, + { "mululq", 0, { 8 }, { 4, 4 }, emulate_mululq }, #endif /* accumulators */ - { "accw", accw, NULL, ORC_STATIC_OPCODE_ACCUMULATOR, { 2 }, { 2 }, emulate_accw }, - { "accl", accl, NULL, ORC_STATIC_OPCODE_ACCUMULATOR, { 4 }, { 4 }, emulate_accl }, - { "accsadubl", accsadubl, NULL, ORC_STATIC_OPCODE_ACCUMULATOR, { 4 }, { 1, 1 }, emulate_accsadubl }, - - { "swapw", swapw, NULL, 0, { 2 }, { 2 }, emulate_swapw }, - { "swapl", swapl, NULL, 0, { 4 }, { 4 }, emulate_swapl }, - { "select0wb", select0wb, NULL, 0, { 1 }, { 2 }, emulate_select0wb }, - { "select1wb", select1wb, NULL, 0, { 1 }, { 2 }, emulate_select1wb }, - { "select0lw", select0lw, NULL, 0, { 2 }, { 4 }, emulate_select0lw }, - { "select1lw", select1lw, NULL, 0, { 2 }, { 4 }, emulate_select1lw }, - { "mergewl", mergewl, NULL, 0, { 4 }, { 2, 2 }, emulate_mergewl }, - { "mergebw", mergebw, NULL, 0, { 2 }, { 1, 1 }, emulate_mergebw }, - { "splitlw", splitlw, NULL, 0, { 2, 2 }, { 4 }, emulate_splitlw }, - { "splitwb", splitwb, NULL, 0, { 1, 1 }, { 2 }, emulate_splitwb }, + { "accw", ORC_STATIC_OPCODE_ACCUMULATOR, { 2 }, { 2 }, emulate_accw }, + { "accl", ORC_STATIC_OPCODE_ACCUMULATOR, { 4 }, { 4 }, emulate_accl }, + { "accsadubl", ORC_STATIC_OPCODE_ACCUMULATOR, { 4 }, { 1, 1 }, emulate_accsadubl }, + + { "swapw", 0, { 2 }, { 2 }, emulate_swapw }, + { "swapl", 0, { 4 }, { 4 }, emulate_swapl }, + { "select0wb", 0, { 1 }, { 2 }, emulate_select0wb }, + { "select1wb", 0, { 1 }, { 2 }, emulate_select1wb }, + { "select0lw", 0, { 2 }, { 4 }, emulate_select0lw }, + { "select1lw", 0, { 2 }, { 4 }, emulate_select1lw }, + { "mergewl", 0, { 4 }, { 2, 2 }, emulate_mergewl }, + { "mergebw", 0, { 2 }, { 1, 1 }, emulate_mergebw }, + { "splitlw", 0, { 2, 2 }, { 4 }, emulate_splitlw }, + { "splitwb", 0, { 1, 1 }, { 2 }, emulate_splitwb }, /* float ops */ - { "addf", addf, NULL, ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4, 4 }, emulate_addf }, - { "subf", subf, NULL, ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4, 4 }, emulate_subf }, - { "mulf", mulf, NULL, ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4, 4 }, emulate_mulf }, - { "divf", divf, NULL, ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4, 4 }, emulate_divf }, - { "sqrtf", orc_sqrtf, NULL, ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4 }, emulate_sqrtf }, - { "maxf", maxf, NULL, ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4, 4 }, emulate_maxf }, - { "minf", minf, NULL, ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4, 4 }, emulate_minf }, - { "cmpeqf", cmpeqf, NULL, ORC_STATIC_OPCODE_FLOAT_SRC, { 4 }, { 4, 4 }, emulate_cmpeqf }, - { "cmpltf", cmpltf, NULL, ORC_STATIC_OPCODE_FLOAT_SRC, { 4 }, { 4, 4 }, emulate_cmpltf }, - { "cmplef", cmplef, NULL, ORC_STATIC_OPCODE_FLOAT_SRC, { 4 }, { 4, 4 }, emulate_cmplef }, - { "convfl", convfl, NULL, ORC_STATIC_OPCODE_FLOAT_SRC, { 4 }, { 4 }, emulate_convfl }, - { "convlf", convlf, NULL, ORC_STATIC_OPCODE_FLOAT_DEST, { 4 }, { 4 }, emulate_convlf }, + { "addf", ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4, 4 }, emulate_addf }, + { "subf", ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4, 4 }, emulate_subf }, + { "mulf", ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4, 4 }, emulate_mulf }, + { "divf", ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4, 4 }, emulate_divf }, + { "sqrtf", ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4 }, emulate_sqrtf }, + { "maxf", ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4, 4 }, emulate_maxf }, + { "minf", ORC_STATIC_OPCODE_FLOAT, { 4 }, { 4, 4 }, emulate_minf }, + { "cmpeqf", ORC_STATIC_OPCODE_FLOAT_SRC, { 4 }, { 4, 4 }, emulate_cmpeqf }, + { "cmpltf", ORC_STATIC_OPCODE_FLOAT_SRC, { 4 }, { 4, 4 }, emulate_cmpltf }, + { "cmplef", ORC_STATIC_OPCODE_FLOAT_SRC, { 4 }, { 4, 4 }, emulate_cmplef }, + { "convfl", ORC_STATIC_OPCODE_FLOAT_SRC, { 4 }, { 4 }, emulate_convfl }, + { "convlf", ORC_STATIC_OPCODE_FLOAT_DEST, { 4 }, { 4 }, emulate_convlf }, { "" } }; diff --git a/orc/orcprogram.h b/orc/orcprogram.h index 9a30697..61aabcb 100644 --- a/orc/orcprogram.h +++ b/orc/orcprogram.h @@ -274,8 +274,6 @@ struct _OrcOpcodeSet { struct _OrcStaticOpcode { char name[16]; - OrcOpcodeEmulateFunc emulate; - void *emulate_user; unsigned int flags; int dest_size[ORC_STATIC_OPCODE_N_DEST]; int src_size[ORC_STATIC_OPCODE_N_SRC]; diff --git a/testsuite/compile_opcodes_sys.c b/testsuite/compile_opcodes_sys.c index 36d8ac7..ac157e6 100644 --- a/testsuite/compile_opcodes_sys.c +++ b/testsuite/compile_opcodes_sys.c @@ -26,30 +26,27 @@ main (int argc, char *argv[]) opcode_set = orc_opcode_set_get ("sys"); for(i=0;in_opcodes;i++){ - printf("/* %s %d,%d,%d %p */\n", + printf("/* %s %d,%d,%d */\n", opcode_set->opcodes[i].name, opcode_set->opcodes[i].dest_size[0], opcode_set->opcodes[i].src_size[0], - opcode_set->opcodes[i].src_size[1], - opcode_set->opcodes[i].emulate); + opcode_set->opcodes[i].src_size[1]); test_opcode (opcode_set->opcodes + i); } for(i=0;in_opcodes;i++){ - printf("/* %s const %d,%d,%d %p */\n", + printf("/* %s const %d,%d,%d */\n", opcode_set->opcodes[i].name, opcode_set->opcodes[i].dest_size[0], opcode_set->opcodes[i].src_size[0], - opcode_set->opcodes[i].src_size[1], - opcode_set->opcodes[i].emulate); + opcode_set->opcodes[i].src_size[1]); test_opcode_const (opcode_set->opcodes + i); } for(i=0;in_opcodes;i++){ - printf("/* %s param %d,%d,%d %p */\n", + printf("/* %s param %d,%d,%d */\n", opcode_set->opcodes[i].name, opcode_set->opcodes[i].dest_size[0], opcode_set->opcodes[i].src_size[0], - opcode_set->opcodes[i].src_size[1], - opcode_set->opcodes[i].emulate); + opcode_set->opcodes[i].src_size[1]); test_opcode_param (opcode_set->opcodes + i); } diff --git a/testsuite/compile_opcodes_sys_c.c b/testsuite/compile_opcodes_sys_c.c index 0af7588..8f88235 100644 --- a/testsuite/compile_opcodes_sys_c.c +++ b/testsuite/compile_opcodes_sys_c.c @@ -27,12 +27,11 @@ main (int argc, char *argv[]) opcode_set = orc_opcode_set_get ("sys"); for(i=0;in_opcodes;i++){ - if (verbose) printf("/* %s %d,%d,%d %p */\n", + if (verbose) printf("/* %s %d,%d,%d */\n", opcode_set->opcodes[i].name, opcode_set->opcodes[i].dest_size[0], opcode_set->opcodes[i].src_size[0], - opcode_set->opcodes[i].src_size[1], - opcode_set->opcodes[i].emulate); + opcode_set->opcodes[i].src_size[1]); test_opcode (opcode_set->opcodes + i); } diff --git a/testsuite/compile_opcodes_sys_neon.c b/testsuite/compile_opcodes_sys_neon.c index 963fe09..16e92a7 100644 --- a/testsuite/compile_opcodes_sys_neon.c +++ b/testsuite/compile_opcodes_sys_neon.c @@ -26,30 +26,27 @@ main (int argc, char *argv[]) opcode_set = orc_opcode_set_get ("sys"); for(i=0;in_opcodes;i++){ - printf("/* %s %d,%d,%d %p */\n", + printf("/* %s %d,%d,%d */\n", opcode_set->opcodes[i].name, opcode_set->opcodes[i].dest_size[0], opcode_set->opcodes[i].src_size[0], - opcode_set->opcodes[i].src_size[1], - opcode_set->opcodes[i].emulate); + opcode_set->opcodes[i].src_size[1]); test_opcode (opcode_set->opcodes + i); } for(i=0;in_opcodes;i++){ - printf("/* %s const %d,%d,%d %p */\n", + printf("/* %s const %d,%d,%d */\n", opcode_set->opcodes[i].name, opcode_set->opcodes[i].dest_size[0], opcode_set->opcodes[i].src_size[0], - opcode_set->opcodes[i].src_size[1], - opcode_set->opcodes[i].emulate); + opcode_set->opcodes[i].src_size[1]); test_opcode_const (opcode_set->opcodes + i); } for(i=0;in_opcodes;i++){ - printf("/* %s param %d,%d,%d %p */\n", + printf("/* %s param %d,%d,%d */\n", opcode_set->opcodes[i].name, opcode_set->opcodes[i].dest_size[0], opcode_set->opcodes[i].src_size[0], - opcode_set->opcodes[i].src_size[1], - opcode_set->opcodes[i].emulate); + opcode_set->opcodes[i].src_size[1]); test_opcode_param (opcode_set->opcodes + i); } -- 2.7.4