remove old style of opcode emulation
authorDavid Schleef <ds@schleef.org>
Fri, 6 Aug 2010 20:42:49 +0000 (13:42 -0700)
committerDavid Schleef <ds@schleef.org>
Fri, 6 Aug 2010 20:42:49 +0000 (13:42 -0700)
examples/volscale.c
orc/orcopcodes.c
orc/orcprogram.h
testsuite/compile_opcodes_sys.c
testsuite/compile_opcodes_sys_c.c
testsuite/compile_opcodes_sys_neon.c

index f60ba9c..2f2eea2 100644 (file)
@@ -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 },
 
   { "" }
 };
index 37daa65..299bf19 100644 (file)
@@ -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 : (a<b) ? ORC_DENORMAL(a) : ORC_DENORMAL(b))
-#else
-/* SSE style maxf/minf */
-BINARY_F(maxf, (a>b) ? ORC_DENORMAL(a) : ORC_DENORMAL(b))
-BINARY_F(minf, (a<b) ? ORC_DENORMAL(a) : ORC_DENORMAL(b))
-#endif
-
-BINARY_FL(cmpeqf, (ORC_DENORMAL(a) == ORC_DENORMAL(b)) ? (~0) : 0)
-BINARY_FL(cmpltf, ((ORC_DENORMAL(a) < ORC_DENORMAL(b)) && (ORC_DENORMAL(b) > 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 },
 
   { "" }
 };
index 9a30697..61aabcb 100644 (file)
@@ -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];
index 36d8ac7..ac157e6 100644 (file)
@@ -26,30 +26,27 @@ main (int argc, char *argv[])
   opcode_set = orc_opcode_set_get ("sys");
 
   for(i=0;i<opcode_set->n_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;i<opcode_set->n_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;i<opcode_set->n_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);
   }
 
index 0af7588..8f88235 100644 (file)
@@ -27,12 +27,11 @@ main (int argc, char *argv[])
   opcode_set = orc_opcode_set_get ("sys");
 
   for(i=0;i<opcode_set->n_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);
   }
 
index 963fe09..16e92a7 100644 (file)
@@ -26,30 +26,27 @@ main (int argc, char *argv[])
   opcode_set = orc_opcode_set_get ("sys");
 
   for(i=0;i<opcode_set->n_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;i<opcode_set->n_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;i<opcode_set->n_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);
   }