BINARY_UL(subusl, "ORC_CLAMP_UL((uint64_t)%s - (uint64_t)%s)")
BINARY_SL(xorl, "%s ^ %s")
-BINARY_BW(convsbw, "%s")
-BINARY_BW(convubw, "(uint8_t)%s")
-BINARY_WL(convswl, "%s")
-BINARY_WL(convuwl, "(uint16_t)%s")
-BINARY_WB(convwb, "%s")
-BINARY_WB(convssswb, "ORC_CLAMP_SB(%s)")
-BINARY_WB(convsuswb, "ORC_CLAMP_UB(%s)")
-BINARY_WB(convusswb, "ORC_CLAMP_SB(%s)")
-BINARY_WB(convuuswb, "ORC_CLAMP_UB(%s)")
-BINARY_LW(convlw, "%s")
-BINARY_LW(convssslw, "ORC_CLAMP_SW(%s)")
-BINARY_LW(convsuslw, "ORC_CLAMP_UW(%s)")
-BINARY_LW(convusslw, "ORC_CLAMP_SW(%s)")
-BINARY_LW(convuuslw, "ORC_CLAMP_UW(%s)")
+UNARY_BW(convsbw, "%s")
+UNARY_BW(convubw, "(uint8_t)%s")
+UNARY_WL(convswl, "%s")
+UNARY_WL(convuwl, "(uint16_t)%s")
+UNARY_WB(convwb, "%s")
+UNARY_WB(convssswb, "ORC_CLAMP_SB(%s)")
+UNARY_WB(convsuswb, "ORC_CLAMP_UB(%s)")
+UNARY_WB(convusswb, "ORC_CLAMP_SB(%s)")
+UNARY_WB(convuuswb, "ORC_CLAMP_UB(%s)")
+UNARY_LW(convlw, "%s")
+UNARY_LW(convssslw, "ORC_CLAMP_SW(%s)")
+UNARY_LW(convsuslw, "ORC_CLAMP_UW(%s)")
+UNARY_LW(convusslw, "ORC_CLAMP_SW(%s)")
+UNARY_LW(convuuslw, "ORC_CLAMP_UW(%s)")
BINARY_BW(mulsbw, "%s * %s")
BINARY_BW(mulubw, "%s * %s")
}
+#define UNARY(name,op) \
+static void \
+c_rule_ ## name (OrcCompiler *p, void *user, OrcInstruction *insn) \
+{ \
+ char dest[20], src1[20]; \
+\
+ c_get_name (dest, p, insn->dest_args[0]); \
+ c_get_name (src1, p, insn->src_args[0]); \
+ \
+ ORC_ASM_CODE(p," %s = " op ";\n", dest, src1); \
+}
+
#define BINARY(name,op) \
static void \
c_rule_ ## name (OrcCompiler *p, void *user, OrcInstruction *insn) \
#define BINARY_UW(a,b) BINARY(a,b)
#define BINARY_SL(a,b) BINARY(a,b)
#define BINARY_UL(a,b) BINARY(a,b)
-#define UNARY_SB(a,b) BINARY(a,b)
-#define UNARY_UB(a,b) BINARY(a,b)
-#define UNARY_SW(a,b) BINARY(a,b)
-#define UNARY_UW(a,b) BINARY(a,b)
-#define UNARY_SL(a,b) BINARY(a,b)
-#define UNARY_UL(a,b) BINARY(a,b)
+#define UNARY_SB(a,b) UNARY(a,b)
+#define UNARY_UB(a,b) UNARY(a,b)
+#define UNARY_SW(a,b) UNARY(a,b)
+#define UNARY_UW(a,b) UNARY(a,b)
+#define UNARY_SL(a,b) UNARY(a,b)
+#define UNARY_UL(a,b) UNARY(a,b)
#define BINARY_BW(a,b) BINARY(a,b)
#define BINARY_WL(a,b) BINARY(a,b)
#define BINARY_LW(a,b) BINARY(a,b)
#define BINARY_WB(a,b) BINARY(a,b)
+#define UNARY_BW(a,b) UNARY(a,b)
+#define UNARY_WL(a,b) UNARY(a,b)
+#define UNARY_LW(a,b) UNARY(a,b)
+#define UNARY_WB(a,b) UNARY(a,b)
#include "opcodes.h"
#undef BINARY_WL
#undef BINARY_LW
#undef BINARY_WB
+#undef UNARY_BW
+#undef UNARY_WL
+#undef UNARY_LW
+#undef UNARY_WB
static OrcTarget c_target = {
"c",
#define BINARY_WL(a,b) orc_rule_register (rule_set, #a , c_rule_ ## a, NULL);
#define BINARY_LW(a,b) orc_rule_register (rule_set, #a , c_rule_ ## a, NULL);
#define BINARY_WB(a,b) orc_rule_register (rule_set, #a , c_rule_ ## a, NULL);
+#define UNARY_BW(a,b) orc_rule_register (rule_set, #a , c_rule_ ## a, NULL);
+#define UNARY_WL(a,b) orc_rule_register (rule_set, #a , c_rule_ ## a, NULL);
+#define UNARY_LW(a,b) orc_rule_register (rule_set, #a , c_rule_ ## a, NULL);
+#define UNARY_WB(a,b) orc_rule_register (rule_set, #a , c_rule_ ## a, NULL);
#include "opcodes.h"