diff options
Diffstat (limited to 'orc/orcprogram-c.c')
-rw-r--r-- | orc/orcprogram-c.c | 911 |
1 files changed, 463 insertions, 448 deletions
diff --git a/orc/orcprogram-c.c b/orc/orcprogram-c.c index dac0fe6..295e7c6 100644 --- a/orc/orcprogram-c.c +++ b/orc/orcprogram-c.c @@ -10,16 +10,17 @@ #include <orc/orcdebug.h> static const char *c_get_type_name (int size); -static void c_get_name_int (char *name, OrcCompiler *p, OrcInstruction *insn, int var); +static void c_get_name_int (char *name, OrcCompiler * p, OrcInstruction * insn, + int var); void orc_c_init (void); void -orc_compiler_c_init (OrcCompiler *compiler) +orc_compiler_c_init (OrcCompiler * compiler) { int i; - for(i=ORC_GP_REG_BASE;i<ORC_GP_REG_BASE+32;i++){ + for (i = ORC_GP_REG_BASE; i < ORC_GP_REG_BASE + 32; i++) { compiler->valid_regs[i] = 1; } compiler->loop_shift = 0; @@ -29,108 +30,103 @@ const char * orc_target_c_get_typedefs (void) { return - "#ifndef _ORC_INTEGER_TYPEDEFS_\n" - "#define _ORC_INTEGER_TYPEDEFS_\n" - "#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L\n" - "#include <stdint.h>\n" - "typedef int8_t orc_int8;\n" - "typedef int16_t orc_int16;\n" - "typedef int32_t orc_int32;\n" - "typedef int64_t orc_int64;\n" - "typedef uint8_t orc_uint8;\n" - "typedef uint16_t orc_uint16;\n" - "typedef uint32_t orc_uint32;\n" - "typedef uint64_t orc_uint64;\n" - "#define ORC_UINT64_C(x) UINT64_C(x)\n" - "#elif defined(_MSC_VER)\n" - "typedef signed __int8 orc_int8;\n" - "typedef signed __int16 orc_int16;\n" - "typedef signed __int32 orc_int32;\n" - "typedef signed __int64 orc_int64;\n" - "typedef unsigned __int8 orc_uint8;\n" - "typedef unsigned __int16 orc_uint16;\n" - "typedef unsigned __int32 orc_uint32;\n" - "typedef unsigned __int64 orc_uint64;\n" - "#define ORC_UINT64_C(x) (x##Ui64)\n" - "#define inline __inline\n" - "#else\n" - "#include <limits.h>\n" - "typedef signed char orc_int8;\n" - "typedef short orc_int16;\n" - "typedef int orc_int32;\n" - "typedef unsigned char orc_uint8;\n" - "typedef unsigned short orc_uint16;\n" - "typedef unsigned int orc_uint32;\n" - "#if INT_MAX == LONG_MAX\n" - "typedef long long orc_int64;\n" - "typedef unsigned long long orc_uint64;\n" - "#define ORC_UINT64_C(x) (x##ULL)\n" - "#else\n" - "typedef long orc_int64;\n" - "typedef unsigned long orc_uint64;\n" - "#define ORC_UINT64_C(x) (x##UL)\n" - "#endif\n" - "#endif\n" - "typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16;\n" - "typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32;\n" - "typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64;\n" - "#endif\n" - "#ifndef ORC_RESTRICT\n" - "#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L\n" - "#define ORC_RESTRICT restrict\n" - "#elif defined(__GNUC__) && __GNUC__ >= 4\n" - "#define ORC_RESTRICT __restrict__\n" - "#else\n" - "#define ORC_RESTRICT\n" - "#endif\n" - "#endif\n"; + "#ifndef _ORC_INTEGER_TYPEDEFS_\n" + "#define _ORC_INTEGER_TYPEDEFS_\n" + "#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L\n" + "#include <stdint.h>\n" + "typedef int8_t orc_int8;\n" + "typedef int16_t orc_int16;\n" + "typedef int32_t orc_int32;\n" + "typedef int64_t orc_int64;\n" + "typedef uint8_t orc_uint8;\n" + "typedef uint16_t orc_uint16;\n" + "typedef uint32_t orc_uint32;\n" + "typedef uint64_t orc_uint64;\n" + "#define ORC_UINT64_C(x) UINT64_C(x)\n" + "#elif defined(_MSC_VER)\n" + "typedef signed __int8 orc_int8;\n" + "typedef signed __int16 orc_int16;\n" + "typedef signed __int32 orc_int32;\n" + "typedef signed __int64 orc_int64;\n" + "typedef unsigned __int8 orc_uint8;\n" + "typedef unsigned __int16 orc_uint16;\n" + "typedef unsigned __int32 orc_uint32;\n" + "typedef unsigned __int64 orc_uint64;\n" + "#define ORC_UINT64_C(x) (x##Ui64)\n" + "#define inline __inline\n" + "#else\n" + "#include <limits.h>\n" + "typedef signed char orc_int8;\n" + "typedef short orc_int16;\n" + "typedef int orc_int32;\n" + "typedef unsigned char orc_uint8;\n" + "typedef unsigned short orc_uint16;\n" + "typedef unsigned int orc_uint32;\n" + "#if INT_MAX == LONG_MAX\n" + "typedef long long orc_int64;\n" + "typedef unsigned long long orc_uint64;\n" + "#define ORC_UINT64_C(x) (x##ULL)\n" + "#else\n" + "typedef long orc_int64;\n" + "typedef unsigned long orc_uint64;\n" + "#define ORC_UINT64_C(x) (x##UL)\n" + "#endif\n" + "#endif\n" + "typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16;\n" + "typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32;\n" + "typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64;\n" + "#endif\n" + "#ifndef ORC_RESTRICT\n" + "#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L\n" + "#define ORC_RESTRICT restrict\n" + "#elif defined(__GNUC__) && __GNUC__ >= 4\n" + "#define ORC_RESTRICT __restrict__\n" + "#else\n" "#define ORC_RESTRICT\n" "#endif\n" "#endif\n"; } const char * orc_target_c_get_asm_preamble (void) { return "\n" - "/* begin Orc C target preamble */\n" - "#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))\n" - "#define ORC_ABS(a) ((a)<0 ? -(a) : (a))\n" - "#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))\n" - "#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))\n" - "#define ORC_SB_MAX 127\n" - "#define ORC_SB_MIN (-1-ORC_SB_MAX)\n" - "#define ORC_UB_MAX 255\n" - "#define ORC_UB_MIN 0\n" - "#define ORC_SW_MAX 32767\n" - "#define ORC_SW_MIN (-1-ORC_SW_MAX)\n" - "#define ORC_UW_MAX 65535\n" - "#define ORC_UW_MIN 0\n" - "#define ORC_SL_MAX 2147483647\n" - "#define ORC_SL_MIN (-1-ORC_SL_MAX)\n" - "#define ORC_UL_MAX 4294967295U\n" - "#define ORC_UL_MIN 0\n" - "#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)\n" - "#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)\n" - "#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)\n" - "#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)\n" - "#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)\n" - "#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)\n" - "#define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))\n" - "#define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))\n" - "#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))\n" - "#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))\n" - "#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))\n" - "#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))\n" - "#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))\n" - "#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))\n" - "#ifndef ORC_RESTRICT\n" - "#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L\n" - "#define ORC_RESTRICT restrict\n" - "#elif defined(__GNUC__) && __GNUC__ >= 4\n" - "#define ORC_RESTRICT __restrict__\n" - "#else\n" - "#define ORC_RESTRICT\n" - "#endif\n" - "#endif\n" - "/* end Orc C target preamble */\n\n"; + "/* begin Orc C target preamble */\n" + "#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))\n" + "#define ORC_ABS(a) ((a)<0 ? -(a) : (a))\n" + "#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))\n" + "#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))\n" + "#define ORC_SB_MAX 127\n" + "#define ORC_SB_MIN (-1-ORC_SB_MAX)\n" + "#define ORC_UB_MAX 255\n" + "#define ORC_UB_MIN 0\n" + "#define ORC_SW_MAX 32767\n" + "#define ORC_SW_MIN (-1-ORC_SW_MAX)\n" + "#define ORC_UW_MAX 65535\n" + "#define ORC_UW_MIN 0\n" + "#define ORC_SL_MAX 2147483647\n" + "#define ORC_SL_MIN (-1-ORC_SL_MAX)\n" + "#define ORC_UL_MAX 4294967295U\n" + "#define ORC_UL_MIN 0\n" + "#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)\n" + "#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)\n" + "#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)\n" + "#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)\n" + "#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)\n" + "#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)\n" + "#define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))\n" + "#define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))\n" + "#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))\n" + "#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))\n" + "#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))\n" + "#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))\n" + "#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))\n" + "#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))\n" + "#ifndef ORC_RESTRICT\n" + "#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L\n" + "#define ORC_RESTRICT restrict\n" + "#elif defined(__GNUC__) && __GNUC__ >= 4\n" + "#define ORC_RESTRICT __restrict__\n" + "#else\n" + "#define ORC_RESTRICT\n" + "#endif\n" "#endif\n" "/* end Orc C target preamble */\n\n"; } unsigned int @@ -155,37 +151,37 @@ static const char *varnames[] = { }; static void -get_varname (char *s, OrcCompiler *compiler, int var) +get_varname (char *s, OrcCompiler * compiler, int var) { if (compiler->target_flags & ORC_TARGET_C_NOEXEC) { if (var < 48) { strcpy (s, varnames[var]); } else { - sprintf(s, "t%d", var-32); + sprintf (s, "t%d", var - 32); } } else if (compiler->target_flags & ORC_TARGET_C_OPCODE) { if (var < ORC_VAR_S1) { - sprintf(s, "ex->dest_ptrs[%d]", var-ORC_VAR_D1); + sprintf (s, "ex->dest_ptrs[%d]", var - ORC_VAR_D1); } else { - sprintf(s, "ex->src_ptrs[%d]", var-ORC_VAR_S1); + sprintf (s, "ex->src_ptrs[%d]", var - ORC_VAR_S1); } } else { - sprintf(s, "ex->arrays[%d]", var); + sprintf (s, "ex->arrays[%d]", var); } } static void -get_varname_stride (char *s, OrcCompiler *compiler, int var) +get_varname_stride (char *s, OrcCompiler * compiler, int var) { if (compiler->target_flags & ORC_TARGET_C_NOEXEC) { - sprintf(s, "%s_stride", varnames[var]); + sprintf (s, "%s_stride", varnames[var]); } else { - sprintf(s, "ex->params[%d]", var); + sprintf (s, "ex->params[%d]", var); } } void -orc_compiler_c_assemble (OrcCompiler *compiler) +orc_compiler_c_assemble (OrcCompiler * compiler) { int i; int j; @@ -195,119 +191,117 @@ orc_compiler_c_assemble (OrcCompiler *compiler) int prefix = 0; if (!(compiler->target_flags & ORC_TARGET_C_BARE)) { - ORC_ASM_CODE(compiler,"void\n"); - ORC_ASM_CODE(compiler,"%s (OrcExecutor *ex)\n", compiler->program->name); - ORC_ASM_CODE(compiler,"{\n"); + ORC_ASM_CODE (compiler, "void\n"); + ORC_ASM_CODE (compiler, "%s (OrcExecutor *ex)\n", compiler->program->name); + ORC_ASM_CODE (compiler, "{\n"); } - ORC_ASM_CODE(compiler,"%*s int i;\n", prefix, ""); + ORC_ASM_CODE (compiler, "%*s int i;\n", prefix, ""); if (compiler->program->is_2d) { - ORC_ASM_CODE(compiler," int j;\n"); + ORC_ASM_CODE (compiler, " int j;\n"); } if (compiler->program->constant_n == 0) { if (!(compiler->target_flags & ORC_TARGET_C_NOEXEC) && !(compiler->target_flags & ORC_TARGET_C_OPCODE)) { - ORC_ASM_CODE(compiler," int n = ex->n;\n"); + ORC_ASM_CODE (compiler, " int n = ex->n;\n"); } } else { - ORC_ASM_CODE(compiler," int n = %d;\n", compiler->program->constant_n); + ORC_ASM_CODE (compiler, " int n = %d;\n", compiler->program->constant_n); } if (compiler->program->is_2d) { if (compiler->program->constant_m == 0) { if (!(compiler->target_flags & ORC_TARGET_C_NOEXEC)) { - ORC_ASM_CODE(compiler," int m = ex->params[ORC_VAR_A1];\n"); + ORC_ASM_CODE (compiler, " int m = ex->params[ORC_VAR_A1];\n"); } } else { - ORC_ASM_CODE(compiler," int m = %d;\n", compiler->program->constant_m); + ORC_ASM_CODE (compiler, " int m = %d;\n", compiler->program->constant_m); } } - for(i=0;i<ORC_N_COMPILER_VARIABLES;i++){ + for (i = 0; i < ORC_N_COMPILER_VARIABLES; i++) { OrcVariable *var = compiler->vars + i; - if (var->name == NULL) continue; + if (var->name == NULL) + continue; switch (var->vartype) { case ORC_VAR_TYPE_CONST: break; case ORC_VAR_TYPE_TEMP: if (!(var->last_use == -1 && var->first_use == 0)) { - ORC_ASM_CODE(compiler," %s var%d;\n", c_get_type_name(var->size), i); + ORC_ASM_CODE (compiler, " %s var%d;\n", c_get_type_name (var->size), + i); } break; case ORC_VAR_TYPE_SRC: - ORC_ASM_CODE(compiler," const %s * ORC_RESTRICT ptr%d;\n", - c_get_type_name (var->size), - i); + ORC_ASM_CODE (compiler, " const %s * ORC_RESTRICT ptr%d;\n", + c_get_type_name (var->size), i); break; case ORC_VAR_TYPE_DEST: - ORC_ASM_CODE(compiler," %s * ORC_RESTRICT ptr%d;\n", - c_get_type_name (var->size), - i); + ORC_ASM_CODE (compiler, " %s * ORC_RESTRICT ptr%d;\n", + c_get_type_name (var->size), i); break; case ORC_VAR_TYPE_ACCUMULATOR: if (var->size >= 2) { - ORC_ASM_CODE(compiler," %s var%d = { 0 };\n", - c_get_type_name (var->size), - i); + ORC_ASM_CODE (compiler, " %s var%d = { 0 };\n", + c_get_type_name (var->size), i); } else { - ORC_ASM_CODE(compiler," %s var%d = 0;\n", - c_get_type_name (var->size), - i); + ORC_ASM_CODE (compiler, " %s var%d = 0;\n", + c_get_type_name (var->size), i); } break; case ORC_VAR_TYPE_PARAM: break; default: - ORC_COMPILER_ERROR(compiler, "bad vartype"); + ORC_COMPILER_ERROR (compiler, "bad vartype"); break; } } - ORC_ASM_CODE(compiler,"\n"); + ORC_ASM_CODE (compiler, "\n"); if (compiler->program->is_2d) { - ORC_ASM_CODE(compiler," for (j = 0; j < m; j++) {\n"); + ORC_ASM_CODE (compiler, " for (j = 0; j < m; j++) {\n"); prefix = 2; - for(i=0;i<ORC_N_COMPILER_VARIABLES;i++){ + for (i = 0; i < ORC_N_COMPILER_VARIABLES; i++) { OrcVariable *var = compiler->vars + i; - if (var->name == NULL) continue; + if (var->name == NULL) + continue; switch (var->vartype) { case ORC_VAR_TYPE_SRC: - { - char s1[40], s2[40]; - get_varname(s1, compiler, i); - get_varname_stride(s2, compiler, i); - ORC_ASM_CODE(compiler, - " ptr%d = ORC_PTR_OFFSET(%s, %s * j);\n", - i, s1, s2); - } + { + char s1[40], s2[40]; + get_varname (s1, compiler, i); + get_varname_stride (s2, compiler, i); + ORC_ASM_CODE (compiler, + " ptr%d = ORC_PTR_OFFSET(%s, %s * j);\n", i, s1, s2); + } break; case ORC_VAR_TYPE_DEST: - { - char s1[40], s2[40]; - get_varname(s1, compiler, i), - get_varname_stride(s2, compiler, i), - ORC_ASM_CODE(compiler, - " ptr%d = ORC_PTR_OFFSET(%s, %s * j);\n", - i, s1, s2); - } + { + char s1[40], s2[40]; + get_varname (s1, compiler, i), + get_varname_stride (s2, compiler, i), + ORC_ASM_CODE (compiler, + " ptr%d = ORC_PTR_OFFSET(%s, %s * j);\n", i, s1, s2); + } break; default: break; } } } else { - for(i=0;i<ORC_N_COMPILER_VARIABLES;i++){ + for (i = 0; i < ORC_N_COMPILER_VARIABLES; i++) { OrcVariable *var = compiler->vars + i; char s[40]; - if (var->name == NULL) continue; - get_varname(s, compiler, i); + if (var->name == NULL) + continue; + get_varname (s, compiler, i); switch (var->vartype) { case ORC_VAR_TYPE_SRC: - ORC_ASM_CODE(compiler," ptr%d = (%s *)%s;\n", i, + ORC_ASM_CODE (compiler, " ptr%d = (%s *)%s;\n", i, c_get_type_name (var->size), s); break; case ORC_VAR_TYPE_DEST: - ORC_ASM_CODE(compiler," ptr%d = (%s *)%s;\n", i, + ORC_ASM_CODE (compiler, " ptr%d = (%s *)%s;\n", i, c_get_type_name (var->size), s); break; default: @@ -316,111 +310,114 @@ orc_compiler_c_assemble (OrcCompiler *compiler) } } - ORC_ASM_CODE(compiler,"\n"); - for(j=0;j<compiler->n_insns;j++){ + ORC_ASM_CODE (compiler, "\n"); + for (j = 0; j < compiler->n_insns; j++) { insn = compiler->insns + j; opcode = insn->opcode; - if (!(insn->flags & ORC_INSN_FLAG_INVARIANT)) continue; + if (!(insn->flags & ORC_INSN_FLAG_INVARIANT)) + continue; - ORC_ASM_CODE(compiler,"%*s /* %d: %s */\n", prefix, "", + ORC_ASM_CODE (compiler, "%*s /* %d: %s */\n", prefix, "", j, insn->opcode->name); rule = insn->rule; if (!rule) { - ORC_COMPILER_ERROR(compiler, "No rule for: %s on target %s", opcode->name, - compiler->target->name); + ORC_COMPILER_ERROR (compiler, "No rule for: %s on target %s", + opcode->name, compiler->target->name); continue; } - ORC_ASM_CODE(compiler,"%*s", prefix, ""); - if (insn->flags & (ORC_INSTRUCTION_FLAG_X2|ORC_INSTRUCTION_FLAG_X4)) { + ORC_ASM_CODE (compiler, "%*s", prefix, ""); + if (insn->flags & (ORC_INSTRUCTION_FLAG_X2 | ORC_INSTRUCTION_FLAG_X4)) { int n; if (insn->flags & ORC_INSTRUCTION_FLAG_X2) { n = 2; } else { n = 4; } - for(i=0;i<n;i++){ + for (i = 0; i < n; i++) { compiler->unroll_index = i; - ORC_ASM_CODE(compiler,"%*s", prefix, ""); + ORC_ASM_CODE (compiler, "%*s", prefix, ""); rule->emit (compiler, rule->emit_user, insn); } } else { - ORC_ASM_CODE(compiler,"%*s", prefix, ""); + ORC_ASM_CODE (compiler, "%*s", prefix, ""); rule->emit (compiler, rule->emit_user, insn); } } - ORC_ASM_CODE(compiler,"\n"); - ORC_ASM_CODE(compiler,"%*s for (i = 0; i < n; i++) {\n", prefix, ""); + ORC_ASM_CODE (compiler, "\n"); + ORC_ASM_CODE (compiler, "%*s for (i = 0; i < n; i++) {\n", prefix, ""); /* Emit instructions */ - for(j=0;j<compiler->n_insns;j++){ + for (j = 0; j < compiler->n_insns; j++) { insn = compiler->insns + j; opcode = insn->opcode; - if (insn->flags & ORC_INSN_FLAG_INVARIANT) continue; + if (insn->flags & ORC_INSN_FLAG_INVARIANT) + continue; - ORC_ASM_CODE(compiler,"%*s /* %d: %s */\n", prefix, "", + ORC_ASM_CODE (compiler, "%*s /* %d: %s */\n", prefix, "", j, insn->opcode->name); rule = insn->rule; if (!rule) { - ORC_COMPILER_ERROR(compiler, "No rule for: %s on target %s", opcode->name, - compiler->target->name); + ORC_COMPILER_ERROR (compiler, "No rule for: %s on target %s", + opcode->name, compiler->target->name); continue; } - if (insn->flags & (ORC_INSTRUCTION_FLAG_X2|ORC_INSTRUCTION_FLAG_X4)) { + if (insn->flags & (ORC_INSTRUCTION_FLAG_X2 | ORC_INSTRUCTION_FLAG_X4)) { int n; if (insn->flags & ORC_INSTRUCTION_FLAG_X2) { n = 2; } else { n = 4; } - for(i=0;i<n;i++){ + for (i = 0; i < n; i++) { compiler->unroll_index = i; - ORC_ASM_CODE(compiler,"%*s", prefix, ""); + ORC_ASM_CODE (compiler, "%*s", prefix, ""); rule->emit (compiler, rule->emit_user, insn); } } else { - ORC_ASM_CODE(compiler,"%*s", prefix, ""); + ORC_ASM_CODE (compiler, "%*s", prefix, ""); rule->emit (compiler, rule->emit_user, insn); } } - ORC_ASM_CODE(compiler,"%*s }\n", prefix, ""); + ORC_ASM_CODE (compiler, "%*s }\n", prefix, ""); if (compiler->program->is_2d) { - ORC_ASM_CODE(compiler," }\n"); + ORC_ASM_CODE (compiler, " }\n"); } - for(i=0;i<ORC_N_COMPILER_VARIABLES;i++){ + for (i = 0; i < ORC_N_COMPILER_VARIABLES; i++) { char varname[40]; OrcVariable *var = compiler->vars + i; - if (var->name == NULL) continue; + if (var->name == NULL) + continue; switch (var->vartype) { case ORC_VAR_TYPE_ACCUMULATOR: c_get_name_int (varname, compiler, NULL, i); if (var->size == 2) { if (compiler->target_flags & ORC_TARGET_C_NOEXEC) { - ORC_ASM_CODE(compiler," *%s = (%s & 0xffff);\n", + ORC_ASM_CODE (compiler, " *%s = (%s & 0xffff);\n", varnames[i], varname); } else if (compiler->target_flags & ORC_TARGET_C_OPCODE) { - ORC_ASM_CODE(compiler," ((orc_union32 *)ex->dest_ptrs[%d])->i = " + ORC_ASM_CODE (compiler, " ((orc_union32 *)ex->dest_ptrs[%d])->i = " "(%s + ((orc_union32 *)ex->dest_ptrs[%d])->i) & 0xffff;\n", i - ORC_VAR_A1, varname, i - ORC_VAR_A1); } else { - ORC_ASM_CODE(compiler," ex->accumulators[%d] = (%s & 0xffff);\n", + ORC_ASM_CODE (compiler, " ex->accumulators[%d] = (%s & 0xffff);\n", i - ORC_VAR_A1, varname); } } else { if (compiler->target_flags & ORC_TARGET_C_NOEXEC) { - ORC_ASM_CODE(compiler," *%s = %s;\n", - varnames[i], varname); + ORC_ASM_CODE (compiler, " *%s = %s;\n", varnames[i], varname); } else if (compiler->target_flags & ORC_TARGET_C_OPCODE) { - ORC_ASM_CODE(compiler," ((orc_union32 *)ex->dest_ptrs[%d])->i += %s;\n", + ORC_ASM_CODE (compiler, + " ((orc_union32 *)ex->dest_ptrs[%d])->i += %s;\n", i - ORC_VAR_A1, varname); } else { - ORC_ASM_CODE(compiler," ex->accumulators[%d] = %s;\n", + ORC_ASM_CODE (compiler, " ex->accumulators[%d] = %s;\n", i - ORC_VAR_A1, varname); } } @@ -431,8 +428,8 @@ orc_compiler_c_assemble (OrcCompiler *compiler) } if (!(compiler->target_flags & ORC_TARGET_C_BARE)) { - ORC_ASM_CODE(compiler,"}\n"); - ORC_ASM_CODE(compiler,"\n"); + ORC_ASM_CODE (compiler, "}\n"); + ORC_ASM_CODE (compiler, "\n"); } } @@ -440,66 +437,66 @@ orc_compiler_c_assemble (OrcCompiler *compiler) /* rules */ static void -c_get_name_int (char *name, OrcCompiler *p, OrcInstruction *insn, int var) +c_get_name_int (char *name, OrcCompiler * p, OrcInstruction * insn, int var) { if (p->vars[var].vartype == ORC_VAR_TYPE_PARAM) { if (p->target_flags & ORC_TARGET_C_NOEXEC) { - sprintf(name,"%s", varnames[var]); + sprintf (name, "%s", varnames[var]); } else if (p->target_flags & ORC_TARGET_C_OPCODE) { - sprintf(name,"((orc_union64 *)(ex->src_ptrs[%d]))->i", + sprintf (name, "((orc_union64 *)(ex->src_ptrs[%d]))->i", var - ORC_VAR_P1 + p->program->n_src_vars); } else { switch (p->vars[var].param_type) { case ORC_PARAM_TYPE_INT: - sprintf(name,"ex->params[%d]", var); + sprintf (name, "ex->params[%d]", var); break; case ORC_PARAM_TYPE_FLOAT: - sprintf(name,"((orc_union32 *)(ex->params+%d))->i", var); + sprintf (name, "((orc_union32 *)(ex->params+%d))->i", var); break; case ORC_PARAM_TYPE_INT64: /* FIXME */ - sprintf(name,"((orc_union32 *)(ex->params+%d))->i", var); + sprintf (name, "((orc_union32 *)(ex->params+%d))->i", var); break; case ORC_PARAM_TYPE_DOUBLE: /* FIXME */ - sprintf(name,"((orc_union32 *)(ex->params+%d))->i", var); + sprintf (name, "((orc_union32 *)(ex->params+%d))->i", var); break; default: - ORC_ASSERT(0); + ORC_ASSERT (0); } } } else if (p->vars[var].vartype == ORC_VAR_TYPE_CONST) { if (p->vars[var].value.i == 0x80000000) { - sprintf(name,"0x80000000"); + sprintf (name, "0x80000000"); } else { - if (p->vars[var].value.i == (int)p->vars[var].value.i) { - sprintf(name, "%d", (int)p->vars[var].value.i); + if (p->vars[var].value.i == (int) p->vars[var].value.i) { + sprintf (name, "%d", (int) p->vars[var].value.i); } else { - ORC_ASSERT(0); + ORC_ASSERT (0); } } } else { if (insn && (insn->flags & ORC_INSTRUCTION_FLAG_X2)) { - sprintf(name, "var%d.x2[%d]", var, p->unroll_index); + sprintf (name, "var%d.x2[%d]", var, p->unroll_index); } else if (insn && (insn->flags & ORC_INSTRUCTION_FLAG_X4)) { - sprintf(name, "var%d.x4[%d]", var, p->unroll_index); + sprintf (name, "var%d.x4[%d]", var, p->unroll_index); } else { if (p->vars[var].size >= 2) { - sprintf(name, "var%d.i", var); + sprintf (name, "var%d.i", var); } else { - sprintf(name, "var%d", var); + sprintf (name, "var%d", var); } } } } static void -c_get_name_float (char *name, OrcCompiler *p, OrcInstruction *insn, int var) +c_get_name_float (char *name, OrcCompiler * p, OrcInstruction * insn, int var) { if (insn && (insn->flags & ORC_INSTRUCTION_FLAG_X2)) { - sprintf(name, "var%d.x2f[%d]", var, p->unroll_index); + sprintf (name, "var%d.x2f[%d]", var, p->unroll_index); } else if (insn && (insn->flags & ORC_INSTRUCTION_FLAG_X4)) { - sprintf(name, "var%d.x4f[%d]", var, p->unroll_index); + sprintf (name, "var%d.x4f[%d]", var, p->unroll_index); } else { switch (p->vars[var].vartype) { case ORC_VAR_TYPE_CONST: @@ -507,14 +504,14 @@ c_get_name_float (char *name, OrcCompiler *p, OrcInstruction *insn, int var) case ORC_VAR_TYPE_ACCUMULATOR: case ORC_VAR_TYPE_SRC: case ORC_VAR_TYPE_DEST: - sprintf(name, "var%d.f", var); + sprintf (name, "var%d.f", var); break; case ORC_VAR_TYPE_PARAM: - sprintf(name, "var%d", var); + sprintf (name, "var%d", var); break; default: - ORC_COMPILER_ERROR(p, "bad vartype"); - sprintf(name, "ERROR"); + ORC_COMPILER_ERROR (p, "bad vartype"); + sprintf (name, "ERROR"); break; } } @@ -767,53 +764,54 @@ c_rule_ ## name (OrcCompiler *p, void *user, OrcInstruction *insn) \ static void -c_rule_loadpX (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_loadpX (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40]; - int size = ORC_PTR_TO_INT(user); + int size = ORC_PTR_TO_INT (user); if ((p->target_flags & ORC_TARGET_C_NOEXEC) && (p->vars[insn->src_args[0]].param_type == ORC_PARAM_TYPE_FLOAT || - p->vars[insn->src_args[0]].param_type == ORC_PARAM_TYPE_DOUBLE)) + p->vars[insn->src_args[0]].param_type == ORC_PARAM_TYPE_DOUBLE)) c_get_name_float (dest, p, insn, insn->dest_args[0]); else c_get_name_int (dest, p, insn, insn->dest_args[0]); if (p->vars[insn->src_args[0]].vartype == ORC_VAR_TYPE_PARAM) { if (p->target_flags & ORC_TARGET_C_NOEXEC) { - ORC_ASM_CODE(p," %s = %s;\n", dest, varnames[insn->src_args[0]]); + ORC_ASM_CODE (p, " %s = %s;\n", dest, varnames[insn->src_args[0]]); } else if (p->target_flags & ORC_TARGET_C_OPCODE) { - ORC_ASM_CODE(p," %s = ((orc_union64 *)(ex->src_ptrs[%d]))->i;\n", + ORC_ASM_CODE (p, " %s = ((orc_union64 *)(ex->src_ptrs[%d]))->i;\n", dest, insn->src_args[0] - ORC_VAR_P1 + p->program->n_src_vars); } else { if (size == 8) { - ORC_ASM_CODE(p," %s = (ex->params[%d] & 0xffffffff) | ((orc_uint64)(ex->params[%d + (ORC_VAR_T1 - ORC_VAR_P1)]) << 32);\n", + ORC_ASM_CODE (p, + " %s = (ex->params[%d] & 0xffffffff) | ((orc_uint64)(ex->params[%d + (ORC_VAR_T1 - ORC_VAR_P1)]) << 32);\n", dest, insn->src_args[0], insn->src_args[0]); } else { - ORC_ASM_CODE(p," %s = ex->params[%d];\n", dest, - insn->src_args[0]); + ORC_ASM_CODE (p, " %s = ex->params[%d];\n", dest, insn->src_args[0]); } } } else if (p->vars[insn->src_args[0]].vartype == ORC_VAR_TYPE_CONST) { if (p->vars[insn->src_args[0]].size <= 4) { - ORC_ASM_CODE(p," %s = (int)0x%08x; /* %d or %gf */\n", dest, - (unsigned int)p->vars[insn->src_args[0]].value.i, - (int)p->vars[insn->src_args[0]].value.i, + ORC_ASM_CODE (p, " %s = (int)0x%08x; /* %d or %gf */\n", dest, + (unsigned int) p->vars[insn->src_args[0]].value.i, + (int) p->vars[insn->src_args[0]].value.i, p->vars[insn->src_args[0]].value.f); } else { - ORC_ASM_CODE(p," %s = ORC_UINT64_C(0x%08x%08x); /* %gf */\n", dest, - (orc_uint32)(((orc_uint64)p->vars[insn->src_args[0]].value.i)>>32), - ((orc_uint32)p->vars[insn->src_args[0]].value.i), + ORC_ASM_CODE (p, " %s = ORC_UINT64_C(0x%08x%08x); /* %gf */\n", dest, + (orc_uint32) (((orc_uint64) p->vars[insn->src_args[0]]. + value.i) >> 32), + ((orc_uint32) p->vars[insn->src_args[0]].value.i), p->vars[insn->src_args[0]].value.f); } } else { - ORC_COMPILER_ERROR(p, "expected param or constant"); + ORC_COMPILER_ERROR (p, "expected param or constant"); } } #if 0 static void -c_rule_loadpX (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_loadpX (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40]; char src[40]; @@ -824,25 +822,25 @@ c_rule_loadpX (OrcCompiler *p, void *user, OrcInstruction *insn) var = &p->vars[insn->src_args[0]]; - ORC_ASM_CODE(p," %s = %s;\n", dest, src); + ORC_ASM_CODE (p, " %s = %s;\n", dest, src); } #endif static void -c_rule_loadX (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_loadX (OrcCompiler * p, void *user, OrcInstruction * insn) { if (p->target_flags & ORC_TARGET_C_OPCODE && !(insn->flags & ORC_INSN_FLAG_ADDED)) { - ORC_ASM_CODE(p," var%d = ptr%d[offset + i];\n", insn->dest_args[0], + ORC_ASM_CODE (p, " var%d = ptr%d[offset + i];\n", insn->dest_args[0], insn->src_args[0]); } else { - ORC_ASM_CODE(p," var%d = ptr%d[i];\n", insn->dest_args[0], + ORC_ASM_CODE (p, " var%d = ptr%d[i];\n", insn->dest_args[0], insn->src_args[0]); } } static void -c_rule_loadoffX (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_loadoffX (OrcCompiler * p, void *user, OrcInstruction * insn) { char src[40]; @@ -850,44 +848,46 @@ c_rule_loadoffX (OrcCompiler *p, void *user, OrcInstruction *insn) if (p->target_flags & ORC_TARGET_C_OPCODE && !(insn->flags & ORC_INSN_FLAG_ADDED)) { - ORC_ASM_CODE(p," var%d = ptr%d[offset + i + %s];\n", insn->dest_args[0], - insn->src_args[0], src); + ORC_ASM_CODE (p, " var%d = ptr%d[offset + i + %s];\n", + insn->dest_args[0], insn->src_args[0], src); } else { - ORC_ASM_CODE(p," var%d = ptr%d[i + %s];\n", insn->dest_args[0], + ORC_ASM_CODE (p, " var%d = ptr%d[i + %s];\n", insn->dest_args[0], insn->src_args[0], src); } } static void -c_rule_loadupdb (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_loadupdb (OrcCompiler * p, void *user, OrcInstruction * insn) { if (p->target_flags & ORC_TARGET_C_OPCODE && !(insn->flags & ORC_INSN_FLAG_ADDED)) { - ORC_ASM_CODE(p," var%d = ptr%d[(offset + i)>>1];\n", insn->dest_args[0], - insn->src_args[0]); + ORC_ASM_CODE (p, " var%d = ptr%d[(offset + i)>>1];\n", + insn->dest_args[0], insn->src_args[0]); } else { - ORC_ASM_CODE(p," var%d = ptr%d[i>>1];\n", insn->dest_args[0], + ORC_ASM_CODE (p, " var%d = ptr%d[i>>1];\n", insn->dest_args[0], insn->src_args[0]); } } static void -c_rule_loadupib (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_loadupib (OrcCompiler * p, void *user, OrcInstruction * insn) { if (p->target_flags & ORC_TARGET_C_OPCODE && !(insn->flags & ORC_INSN_FLAG_ADDED)) { - ORC_ASM_CODE(p," var%d = ((offset + i)&1) ? ((orc_uint8)ptr%d[(offset + i)>>1] + (orc_uint8)ptr%d[((offset + i)>>1)+1] + 1)>>1 : ptr%d[(offset + i)>>1];\n", + ORC_ASM_CODE (p, + " var%d = ((offset + i)&1) ? ((orc_uint8)ptr%d[(offset + i)>>1] + (orc_uint8)ptr%d[((offset + i)>>1)+1] + 1)>>1 : ptr%d[(offset + i)>>1];\n", insn->dest_args[0], insn->src_args[0], insn->src_args[0], insn->src_args[0]); } else { - ORC_ASM_CODE(p," var%d = (i&1) ? ((orc_uint8)ptr%d[i>>1] + (orc_uint8)ptr%d[(i>>1)+1] + 1)>>1 : ptr%d[i>>1];\n", + ORC_ASM_CODE (p, + " var%d = (i&1) ? ((orc_uint8)ptr%d[i>>1] + (orc_uint8)ptr%d[(i>>1)+1] + 1)>>1 : ptr%d[i>>1];\n", insn->dest_args[0], insn->src_args[0], insn->src_args[0], insn->src_args[0]); } } static void -c_rule_ldresnearX (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_ldresnearX (OrcCompiler * p, void *user, OrcInstruction * insn) { char src1[40]; char src2[40]; @@ -897,16 +897,16 @@ c_rule_ldresnearX (OrcCompiler *p, void *user, OrcInstruction *insn) if (p->target_flags & ORC_TARGET_C_OPCODE && !(insn->flags & ORC_INSN_FLAG_ADDED)) { - ORC_ASM_CODE(p," var%d = ptr%d[(%s + (offset + i)*%s)>>16];\n", + ORC_ASM_CODE (p, " var%d = ptr%d[(%s + (offset + i)*%s)>>16];\n", insn->dest_args[0], insn->src_args[0], src1, src2); } else { - ORC_ASM_CODE(p," var%d = ptr%d[(%s + i*%s)>>16];\n", + ORC_ASM_CODE (p, " var%d = ptr%d[(%s + i*%s)>>16];\n", insn->dest_args[0], insn->src_args[0], src1, src2); } } static void -c_rule_ldreslinb (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_ldreslinb (OrcCompiler * p, void *user, OrcInstruction * insn) { char src1[40]; char src2[40]; @@ -914,20 +914,21 @@ c_rule_ldreslinb (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (src1, p, insn, insn->src_args[1]); c_get_name_int (src2, p, insn, insn->src_args[2]); - ORC_ASM_CODE(p," {\n"); + ORC_ASM_CODE (p, " {\n"); if (p->target_flags & ORC_TARGET_C_OPCODE && !(insn->flags & ORC_INSN_FLAG_ADDED)) { - ORC_ASM_CODE(p," int tmp = %s + (offset + i) * %s;\n", src1, src2); + ORC_ASM_CODE (p, " int tmp = %s + (offset + i) * %s;\n", src1, src2); } else { - ORC_ASM_CODE(p," int tmp = %s + i * %s;\n", src1, src2); + ORC_ASM_CODE (p, " int tmp = %s + i * %s;\n", src1, src2); } - ORC_ASM_CODE(p," var%d = ((orc_uint8)ptr%d[tmp>>16] * (256-((tmp>>8)&0xff)) + (orc_uint8)ptr%d[(tmp>>16)+1] * ((tmp>>8)&0xff))>>8;\n", + ORC_ASM_CODE (p, + " var%d = ((orc_uint8)ptr%d[tmp>>16] * (256-((tmp>>8)&0xff)) + (orc_uint8)ptr%d[(tmp>>16)+1] * ((tmp>>8)&0xff))>>8;\n", insn->dest_args[0], insn->src_args[0], insn->src_args[0]); - ORC_ASM_CODE(p," }\n"); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_ldreslinl (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_ldreslinl (OrcCompiler * p, void *user, OrcInstruction * insn) { int i; char src1[40]; @@ -937,59 +938,61 @@ c_rule_ldreslinl (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (src2, p, insn, insn->src_args[2]); - ORC_ASM_CODE(p," {\n"); + ORC_ASM_CODE (p, " {\n"); if (p->target_flags & ORC_TARGET_C_OPCODE && !(insn->flags & ORC_INSN_FLAG_ADDED)) { - ORC_ASM_CODE(p," int tmp = %s + (offset + i) * %s;\n", src1, src2); + ORC_ASM_CODE (p, " int tmp = %s + (offset + i) * %s;\n", src1, src2); } else { - ORC_ASM_CODE(p," int tmp = %s + i * %s;\n", src1, src2); + ORC_ASM_CODE (p, " int tmp = %s + i * %s;\n", src1, src2); } - ORC_ASM_CODE(p," orc_union32 a = ptr%d[tmp>>16];\n", insn->src_args[0]); - ORC_ASM_CODE(p," orc_union32 b = ptr%d[(tmp>>16)+1];\n", insn->src_args[0]); - for (i=0;i<4;i++){ - ORC_ASM_CODE(p," var%d.x4[%d] = ((orc_uint8)a.x4[%d] * (256-((tmp>>8)&0xff)) + (orc_uint8)b.x4[%d] * ((tmp>>8)&0xff))>>8;\n", + ORC_ASM_CODE (p, " orc_union32 a = ptr%d[tmp>>16];\n", insn->src_args[0]); + ORC_ASM_CODE (p, " orc_union32 b = ptr%d[(tmp>>16)+1];\n", + insn->src_args[0]); + for (i = 0; i < 4; i++) { + ORC_ASM_CODE (p, + " var%d.x4[%d] = ((orc_uint8)a.x4[%d] * (256-((tmp>>8)&0xff)) + (orc_uint8)b.x4[%d] * ((tmp>>8)&0xff))>>8;\n", insn->dest_args[0], i, i, i); } - ORC_ASM_CODE(p," }\n"); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_storeX (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_storeX (OrcCompiler * p, void *user, OrcInstruction * insn) { if (p->target_flags & ORC_TARGET_C_OPCODE && !(insn->flags & ORC_INSN_FLAG_ADDED)) { - ORC_ASM_CODE(p," ptr%d[offset + i] = var%d;\n", insn->dest_args[0], + ORC_ASM_CODE (p, " ptr%d[offset + i] = var%d;\n", insn->dest_args[0], insn->src_args[0]); } else { - ORC_ASM_CODE(p," ptr%d[i] = var%d;\n", insn->dest_args[0], + ORC_ASM_CODE (p, " ptr%d[i] = var%d;\n", insn->dest_args[0], insn->src_args[0]); } } static void -c_rule_accw (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_accw (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src1, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p," %s = %s + %s;\n", dest, dest, src1); + ORC_ASM_CODE (p, " %s = %s + %s;\n", dest, dest, src1); } static void -c_rule_accl (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_accl (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src1, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p," %s = %s + %s;\n", dest, dest, src1); + ORC_ASM_CODE (p, " %s = %s + %s;\n", dest, dest, src1); } static void -c_rule_accsadubl (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_accsadubl (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40], src2[40]; @@ -997,13 +1000,13 @@ c_rule_accsadubl (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (src1, p, insn, insn->src_args[0]); c_get_name_int (src2, p, insn, insn->src_args[1]); - ORC_ASM_CODE(p, + ORC_ASM_CODE (p, " %s = %s + ORC_ABS((orc_int32)(orc_uint8)%s - (orc_int32)(orc_uint8)%s);\n", dest, dest, src1, src2); } static void -c_rule_splitql (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_splitql (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest1[40], dest2[40], src[40]; @@ -1011,16 +1014,16 @@ c_rule_splitql (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (dest2, p, insn, insn->dest_args[1]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union64 _src;\n"); - ORC_ASM_CODE(p," _src.i = %s;\n", src); - ORC_ASM_CODE(p," %s = _src.x2[1];\n", dest1); - ORC_ASM_CODE(p," %s = _src.x2[0];\n", dest2); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union64 _src;\n"); + ORC_ASM_CODE (p, " _src.i = %s;\n", src); + ORC_ASM_CODE (p, " %s = _src.x2[1];\n", dest1); + ORC_ASM_CODE (p, " %s = _src.x2[0];\n", dest2); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_splitlw (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_splitlw (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest1[40], dest2[40], src[40]; @@ -1028,16 +1031,16 @@ c_rule_splitlw (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (dest2, p, insn, insn->dest_args[1]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union32 _src;\n"); - ORC_ASM_CODE(p," _src.i = %s;\n", src); - ORC_ASM_CODE(p," %s = _src.x2[1];\n", dest1); - ORC_ASM_CODE(p," %s = _src.x2[0];\n", dest2); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union32 _src;\n"); + ORC_ASM_CODE (p, " _src.i = %s;\n", src); + ORC_ASM_CODE (p, " %s = _src.x2[1];\n", dest1); + ORC_ASM_CODE (p, " %s = _src.x2[0];\n", dest2); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_splitwb (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_splitwb (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest1[40], dest2[40], src[40]; @@ -1045,159 +1048,158 @@ c_rule_splitwb (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (dest2, p, insn, insn->dest_args[1]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union16 _src;\n"); - ORC_ASM_CODE(p," _src.i = %s;\n", src); - ORC_ASM_CODE(p," %s = _src.x2[1];\n", dest1); - ORC_ASM_CODE(p," %s = _src.x2[0];\n", dest2); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union16 _src;\n"); + ORC_ASM_CODE (p, " _src.i = %s;\n", src); + ORC_ASM_CODE (p, " %s = _src.x2[1];\n", dest1); + ORC_ASM_CODE (p, " %s = _src.x2[0];\n", dest2); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_select0ql (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_select0ql (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union64 _src;\n"); - ORC_ASM_CODE(p," _src.i = %s;\n", src); - ORC_ASM_CODE(p," %s = _src.x2[0];\n", dest); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union64 _src;\n"); + ORC_ASM_CODE (p, " _src.i = %s;\n", src); + ORC_ASM_CODE (p, " %s = _src.x2[0];\n", dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_select1ql (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_select1ql (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union64 _src;\n"); - ORC_ASM_CODE(p," _src.i = %s;\n", src); - ORC_ASM_CODE(p," %s = _src.x2[1];\n", dest); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union64 _src;\n"); + ORC_ASM_CODE (p, " _src.i = %s;\n", src); + ORC_ASM_CODE (p, " %s = _src.x2[1];\n", dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_select0lw (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_select0lw (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union32 _src;\n"); - ORC_ASM_CODE(p," _src.i = %s;\n", src); - ORC_ASM_CODE(p," %s = _src.x2[0];\n", dest); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union32 _src;\n"); + ORC_ASM_CODE (p, " _src.i = %s;\n", src); + ORC_ASM_CODE (p, " %s = _src.x2[0];\n", dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_select1lw (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_select1lw (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union32 _src;\n"); - ORC_ASM_CODE(p," _src.i = %s;\n", src); - ORC_ASM_CODE(p," %s = _src.x2[1];\n", dest); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union32 _src;\n"); + ORC_ASM_CODE (p, " _src.i = %s;\n", src); + ORC_ASM_CODE (p, " %s = _src.x2[1];\n", dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_select0wb (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_select0wb (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union16 _src;\n"); - ORC_ASM_CODE(p," _src.i = %s;\n", src); - ORC_ASM_CODE(p," %s = _src.x2[0];\n", dest); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union16 _src;\n"); + ORC_ASM_CODE (p, " _src.i = %s;\n", src); + ORC_ASM_CODE (p, " %s = _src.x2[0];\n", dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_select1wb (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_select1wb (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union16 _src;\n"); - ORC_ASM_CODE(p," _src.i = %s;\n", src); - ORC_ASM_CODE(p," %s = _src.x2[1];\n", dest); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union16 _src;\n"); + ORC_ASM_CODE (p, " _src.i = %s;\n", src); + ORC_ASM_CODE (p, " %s = _src.x2[1];\n", dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_splatbw (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_splatbw (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p," %s = ((%s&0xff) << 8) | (%s&0xff);\n", dest, src, src); + ORC_ASM_CODE (p, " %s = ((%s&0xff) << 8) | (%s&0xff);\n", dest, src, src); } static void -c_rule_splatbl (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_splatbl (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, + ORC_ASM_CODE (p, " %s = ((%s&0xff) << 24) | ((%s&0xff)<<16) | ((%s&0xff) << 8) | (%s&0xff);\n", dest, src, src, src, src); } static void -c_rule_splatw3q (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_splatw3q (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, + ORC_ASM_CODE (p, " %s = ((((orc_uint64)%s)>>48) << 48) | " "((((orc_uint64)%s)>>48)<<32) | " "((((orc_uint64)%s)>>48) << 16) | " - "((((orc_uint64)%s)>>48));\n", - dest, src, src, src, src); + "((((orc_uint64)%s)>>48));\n", dest, src, src, src, src); } static void -c_rule_div255w (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_div255w (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, + ORC_ASM_CODE (p, " %s = ((orc_uint16)(((orc_uint16)(%s+128)) + (((orc_uint16)(%s+128))>>8)))>>8;\n", dest, src, src); } static void -c_rule_divluw (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_divluw (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40], src2[40]; @@ -1205,67 +1207,67 @@ c_rule_divluw (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (src1, p, insn, insn->src_args[0]); c_get_name_int (src2, p, insn, insn->src_args[1]); - ORC_ASM_CODE(p, + ORC_ASM_CODE (p, " %s = ((%s&0xff) == 0) ? 255 : ORC_CLAMP_UB(((orc_uint16)%s)/((orc_uint16)%s&0xff));\n", dest, src2, src1, src2); } static void -c_rule_convlf (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_convlf (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40]; c_get_name_float (dest, p, insn, insn->dest_args[0]); c_get_name_int (src1, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p," %s = %s;\n", dest, src1); + ORC_ASM_CODE (p, " %s = %s;\n", dest, src1); } static void -c_rule_convld (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_convld (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40]; c_get_name_float (dest, p, insn, insn->dest_args[0]); c_get_name_int (src1, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p," %s = %s;\n", dest, src1); + ORC_ASM_CODE (p, " %s = %s;\n", dest, src1); } static void -c_rule_convfd (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_convfd (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40]; c_get_name_float (dest, p, insn, insn->dest_args[0]); c_get_name_int (src1, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union32 _src1;\n"); - ORC_ASM_CODE(p," _src1.i = ORC_DENORMAL(%s);\n", src1); - ORC_ASM_CODE(p," %s = _src1.f;\n", dest); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union32 _src1;\n"); + ORC_ASM_CODE (p, " _src1.i = ORC_DENORMAL(%s);\n", src1); + ORC_ASM_CODE (p, " %s = _src1.f;\n", dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_convdf (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_convdf (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src1, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union64 _src1;\n"); - ORC_ASM_CODE(p," orc_union32 _dest;\n"); - ORC_ASM_CODE(p," _src1.i = ORC_DENORMAL_DOUBLE(%s);\n", src1); - ORC_ASM_CODE(p," _dest.f = _src1.f;\n"); - ORC_ASM_CODE(p," %s = ORC_DENORMAL(_dest.i);\n", dest); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union64 _src1;\n"); + ORC_ASM_CODE (p, " orc_union32 _dest;\n"); + ORC_ASM_CODE (p, " _src1.i = ORC_DENORMAL_DOUBLE(%s);\n", src1); + ORC_ASM_CODE (p, " _dest.f = _src1.f;\n"); + ORC_ASM_CODE (p, " %s = ORC_DENORMAL(_dest.i);\n", dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_convfl (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_convfl (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40], src_i[40]; @@ -1273,16 +1275,18 @@ c_rule_convfl (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_float (src, p, insn, insn->src_args[0]); c_get_name_int (src_i, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," int tmp;\n"); - ORC_ASM_CODE(p," tmp = (int)%s;\n", src); - ORC_ASM_CODE(p," if (tmp == 0x80000000 && !(%s&0x80000000)) tmp = 0x7fffffff;\n", src_i); - ORC_ASM_CODE(p," %s = tmp;\n", dest); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " int tmp;\n"); + ORC_ASM_CODE (p, " tmp = (int)%s;\n", src); + ORC_ASM_CODE (p, + " if (tmp == 0x80000000 && !(%s&0x80000000)) tmp = 0x7fffffff;\n", + src_i); + ORC_ASM_CODE (p, " %s = tmp;\n", dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_convdl (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_convdl (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40], src_i[40]; @@ -1290,16 +1294,18 @@ c_rule_convdl (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_float (src, p, insn, insn->src_args[0]); c_get_name_int (src_i, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," int tmp;\n"); - ORC_ASM_CODE(p," tmp = %s;\n", src); - ORC_ASM_CODE(p," if (tmp == 0x80000000 && !(%s & ORC_UINT64_C(0x8000000000000000))) tmp = 0x7fffffff;\n", src_i); - ORC_ASM_CODE(p," %s = tmp;\n", dest); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " int tmp;\n"); + ORC_ASM_CODE (p, " tmp = %s;\n", src); + ORC_ASM_CODE (p, + " if (tmp == 0x80000000 && !(%s & ORC_UINT64_C(0x8000000000000000))) tmp = 0x7fffffff;\n", + src_i); + ORC_ASM_CODE (p, " %s = tmp;\n", dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_minf (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_minf (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40], src2[40]; @@ -1307,19 +1313,20 @@ c_rule_minf (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (src1, p, insn, insn->src_args[0]); c_get_name_int (src2, p, insn, insn->src_args[1]); - ORC_ASM_CODE(p," {\n"); - ORC_ASM_CODE(p," orc_union32 _src1;\n"); - ORC_ASM_CODE(p," orc_union32 _src2;\n"); - ORC_ASM_CODE(p," _src1.i = ORC_DENORMAL(%s);\n", src1); - ORC_ASM_CODE(p," _src2.i = ORC_DENORMAL(%s);\n", src2); - ORC_ASM_CODE(p," if (ORC_ISNAN(_src1.i)) %s = _src1.i;\n", dest); - ORC_ASM_CODE(p," else if (ORC_ISNAN(_src2.i)) %s = _src2.i;\n", dest); - ORC_ASM_CODE(p," else %s = (_src1.f < _src2.f) ? _src1.i : _src2.i;\n", dest); - ORC_ASM_CODE(p," }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union32 _src1;\n"); + ORC_ASM_CODE (p, " orc_union32 _src2;\n"); + ORC_ASM_CODE (p, " _src1.i = ORC_DENORMAL(%s);\n", src1); + ORC_ASM_CODE (p, " _src2.i = ORC_DENORMAL(%s);\n", src2); + ORC_ASM_CODE (p, " if (ORC_ISNAN(_src1.i)) %s = _src1.i;\n", dest); + ORC_ASM_CODE (p, " else if (ORC_ISNAN(_src2.i)) %s = _src2.i;\n", dest); + ORC_ASM_CODE (p, " else %s = (_src1.f < _src2.f) ? _src1.i : _src2.i;\n", + dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_maxf (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_maxf (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40], src2[40]; @@ -1327,19 +1334,20 @@ c_rule_maxf (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (src1, p, insn, insn->src_args[0]); c_get_name_int (src2, p, insn, insn->src_args[1]); - ORC_ASM_CODE(p," {\n"); - ORC_ASM_CODE(p," orc_union32 _src1;\n"); - ORC_ASM_CODE(p," orc_union32 _src2;\n"); - ORC_ASM_CODE(p," _src1.i = ORC_DENORMAL(%s);\n", src1); - ORC_ASM_CODE(p," _src2.i = ORC_DENORMAL(%s);\n", src2); - ORC_ASM_CODE(p," if (ORC_ISNAN(_src1.i)) %s = _src1.i;\n", dest); - ORC_ASM_CODE(p," else if (ORC_ISNAN(_src2.i)) %s = _src2.i;\n", dest); - ORC_ASM_CODE(p," else %s = (_src1.f > _src2.f) ? _src1.i : _src2.i;\n", dest); - ORC_ASM_CODE(p," }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union32 _src1;\n"); + ORC_ASM_CODE (p, " orc_union32 _src2;\n"); + ORC_ASM_CODE (p, " _src1.i = ORC_DENORMAL(%s);\n", src1); + ORC_ASM_CODE (p, " _src2.i = ORC_DENORMAL(%s);\n", src2); + ORC_ASM_CODE (p, " if (ORC_ISNAN(_src1.i)) %s = _src1.i;\n", dest); + ORC_ASM_CODE (p, " else if (ORC_ISNAN(_src2.i)) %s = _src2.i;\n", dest); + ORC_ASM_CODE (p, " else %s = (_src1.f > _src2.f) ? _src1.i : _src2.i;\n", + dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_mind (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_mind (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40], src2[40]; @@ -1347,19 +1355,22 @@ c_rule_mind (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (src1, p, insn, insn->src_args[0]); c_get_name_int (src2, p, insn, insn->src_args[1]); - ORC_ASM_CODE(p," {\n"); - ORC_ASM_CODE(p," orc_union64 _src1;\n"); - ORC_ASM_CODE(p," orc_union64 _src2;\n"); - ORC_ASM_CODE(p," _src1.i = ORC_DENORMAL_DOUBLE(%s);\n", src1); - ORC_ASM_CODE(p," _src2.i = ORC_DENORMAL_DOUBLE(%s);\n", src2); - ORC_ASM_CODE(p," if (ORC_ISNAN_DOUBLE(_src1.i)) %s = _src1.i;\n", dest); - ORC_ASM_CODE(p," else if (ORC_ISNAN_DOUBLE(_src2.i)) %s = _src2.i;\n", dest); - ORC_ASM_CODE(p," else %s = (_src1.f < _src2.f) ? _src1.i : _src2.i;\n", dest); - ORC_ASM_CODE(p," }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union64 _src1;\n"); + ORC_ASM_CODE (p, " orc_union64 _src2;\n"); + ORC_ASM_CODE (p, " _src1.i = ORC_DENORMAL_DOUBLE(%s);\n", src1); + ORC_ASM_CODE (p, " _src2.i = ORC_DENORMAL_DOUBLE(%s);\n", src2); + ORC_ASM_CODE (p, " if (ORC_ISNAN_DOUBLE(_src1.i)) %s = _src1.i;\n", + dest); + ORC_ASM_CODE (p, " else if (ORC_ISNAN_DOUBLE(_src2.i)) %s = _src2.i;\n", + dest); + ORC_ASM_CODE (p, " else %s = (_src1.f < _src2.f) ? _src1.i : _src2.i;\n", + dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_maxd (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_maxd (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40], src2[40]; @@ -1367,43 +1378,48 @@ c_rule_maxd (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (src1, p, insn, insn->src_args[0]); c_get_name_int (src2, p, insn, insn->src_args[1]); - ORC_ASM_CODE(p," {\n"); - ORC_ASM_CODE(p," orc_union64 _src1;\n"); - ORC_ASM_CODE(p," orc_union64 _src2;\n"); - ORC_ASM_CODE(p," _src1.i = ORC_DENORMAL_DOUBLE(%s);\n", src1); - ORC_ASM_CODE(p," _src2.i = ORC_DENORMAL_DOUBLE(%s);\n", src2); - ORC_ASM_CODE(p," if (ORC_ISNAN_DOUBLE(_src1.i)) %s = _src1.i;\n", dest); - ORC_ASM_CODE(p," else if (ORC_ISNAN_DOUBLE(_src2.i)) %s = _src2.i;\n", dest); - ORC_ASM_CODE(p," else %s = (_src1.f > _src2.f) ? _src1.i : _src2.i;\n", dest); - ORC_ASM_CODE(p," }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union64 _src1;\n"); + ORC_ASM_CODE (p, " orc_union64 _src2;\n"); + ORC_ASM_CODE (p, " _src1.i = ORC_DENORMAL_DOUBLE(%s);\n", src1); + ORC_ASM_CODE (p, " _src2.i = ORC_DENORMAL_DOUBLE(%s);\n", src2); + ORC_ASM_CODE (p, " if (ORC_ISNAN_DOUBLE(_src1.i)) %s = _src1.i;\n", + dest); + ORC_ASM_CODE (p, " else if (ORC_ISNAN_DOUBLE(_src2.i)) %s = _src2.i;\n", + dest); + ORC_ASM_CODE (p, " else %s = (_src1.f > _src2.f) ? _src1.i : _src2.i;\n", + dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_swapwl (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_swapwl (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p," %s = ((%s&0x0000ffff) << 16) | ((%s&0xffff0000) >> 16);\n", - dest, src, src); + ORC_ASM_CODE (p, + " %s = ((%s&0x0000ffff) << 16) | ((%s&0xffff0000) >> 16);\n", dest, + src, src); } static void -c_rule_swaplq (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_swaplq (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src[40]; c_get_name_int (dest, p, insn, insn->dest_args[0]); c_get_name_int (src, p, insn, insn->src_args[0]); - ORC_ASM_CODE(p," %s = (ORC_UINT64_C(%s&0x00000000ffffffff) << 32) | (ORC_UINT64_C(%s&0xffffffff00000000) >> 32);\n", + ORC_ASM_CODE (p, + " %s = (ORC_UINT64_C(%s&0x00000000ffffffff) << 32) | (ORC_UINT64_C(%s&0xffffffff00000000) >> 32);\n", dest, src, src); } static void -c_rule_mergelq (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_mergelq (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40], src2[40]; @@ -1411,16 +1427,16 @@ c_rule_mergelq (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (src1, p, insn, insn->src_args[0]); c_get_name_int (src2, p, insn, insn->src_args[1]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union64 _dest;\n"); - ORC_ASM_CODE(p," _dest.x2[0] = %s;\n", src1); - ORC_ASM_CODE(p," _dest.x2[1] = %s;\n", src2); - ORC_ASM_CODE(p," %s = _dest.i;\n", dest); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union64 _dest;\n"); + ORC_ASM_CODE (p, " _dest.x2[0] = %s;\n", src1); + ORC_ASM_CODE (p, " _dest.x2[1] = %s;\n", src2); + ORC_ASM_CODE (p, " %s = _dest.i;\n", dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_mergewl (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_mergewl (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40], src2[40]; @@ -1428,16 +1444,16 @@ c_rule_mergewl (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (src1, p, insn, insn->src_args[0]); c_get_name_int (src2, p, insn, insn->src_args[1]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union32 _dest;\n"); - ORC_ASM_CODE(p," _dest.x2[0] = %s;\n", src1); - ORC_ASM_CODE(p," _dest.x2[1] = %s;\n", src2); - ORC_ASM_CODE(p," %s = _dest.i;\n", dest); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union32 _dest;\n"); + ORC_ASM_CODE (p, " _dest.x2[0] = %s;\n", src1); + ORC_ASM_CODE (p, " _dest.x2[1] = %s;\n", src2); + ORC_ASM_CODE (p, " %s = _dest.i;\n", dest); + ORC_ASM_CODE (p, " }\n"); } static void -c_rule_mergebw (OrcCompiler *p, void *user, OrcInstruction *insn) +c_rule_mergebw (OrcCompiler * p, void *user, OrcInstruction * insn) { char dest[40], src1[40], src2[40]; @@ -1445,12 +1461,12 @@ c_rule_mergebw (OrcCompiler *p, void *user, OrcInstruction *insn) c_get_name_int (src1, p, insn, insn->src_args[0]); c_get_name_int (src2, p, insn, insn->src_args[1]); - ORC_ASM_CODE(p, " {\n"); - ORC_ASM_CODE(p," orc_union16 _dest;\n"); - ORC_ASM_CODE(p," _dest.x2[0] = %s;\n", src1); - ORC_ASM_CODE(p," _dest.x2[1] = %s;\n", src2); - ORC_ASM_CODE(p," %s = _dest.i;\n", dest); - ORC_ASM_CODE(p, " }\n"); + ORC_ASM_CODE (p, " {\n"); + ORC_ASM_CODE (p, " orc_union16 _dest;\n"); + ORC_ASM_CODE (p, " _dest.x2[0] = %s;\n", src1); + ORC_ASM_CODE (p, " _dest.x2[1] = %s;\n", src2); + ORC_ASM_CODE (p, " %s = _dest.i;\n", dest); + ORC_ASM_CODE (p, " }\n"); } @@ -1461,7 +1477,7 @@ static OrcTarget c_target = { orc_compiler_c_get_default_flags, orc_compiler_c_init, orc_compiler_c_assemble, - { { 0 } }, + {{0}}, 0, orc_target_c_get_asm_preamble, }; @@ -1474,7 +1490,7 @@ orc_c_init (void) orc_target_register (&c_target); - rule_set = orc_rule_set_new (orc_opcode_set_get("sys"), &c_target, 0); + rule_set = orc_rule_set_new (orc_opcode_set_get ("sys"), &c_target, 0); #define BINARY_SB(a,b) orc_rule_register (rule_set, #a , c_rule_ ## a, NULL); #define BINARY_UB(a,b) orc_rule_register (rule_set, #a , c_rule_ ## a, NULL); @@ -1520,10 +1536,10 @@ orc_c_init (void) #include "opcodes.h" - orc_rule_register (rule_set, "loadpb", c_rule_loadpX, (void *)1); - orc_rule_register (rule_set, "loadpw", c_rule_loadpX, (void *)2); - orc_rule_register (rule_set, "loadpl", c_rule_loadpX, (void *)4); - orc_rule_register (rule_set, "loadpq", c_rule_loadpX, (void *)8); + orc_rule_register (rule_set, "loadpb", c_rule_loadpX, (void *) 1); + orc_rule_register (rule_set, "loadpw", c_rule_loadpX, (void *) 2); + orc_rule_register (rule_set, "loadpl", c_rule_loadpX, (void *) 4); + orc_rule_register (rule_set, "loadpq", c_rule_loadpX, (void *) 8); orc_rule_register (rule_set, "loadb", c_rule_loadX, NULL); orc_rule_register (rule_set, "loadw", c_rule_loadX, NULL); orc_rule_register (rule_set, "loadl", c_rule_loadX, NULL); @@ -1575,4 +1591,3 @@ orc_c_init (void) orc_rule_register (rule_set, "mergewl", c_rule_mergewl, NULL); orc_rule_register (rule_set, "mergelq", c_rule_mergelq, NULL); } - |