summaryrefslogtreecommitdiff
path: root/orc/orcprogram-altivec.c
diff options
context:
space:
mode:
Diffstat (limited to 'orc/orcprogram-altivec.c')
-rw-r--r--orc/orcprogram-altivec.c170
1 files changed, 82 insertions, 88 deletions
diff --git a/orc/orcprogram-altivec.c b/orc/orcprogram-altivec.c
index 3801b88..3555ed9 100644
--- a/orc/orcprogram-altivec.c
+++ b/orc/orcprogram-altivec.c
@@ -12,14 +12,14 @@
#include <orc/orcdebug.h>
-void orc_compiler_powerpc_init (OrcCompiler *compiler);
+void orc_compiler_powerpc_init (OrcCompiler * compiler);
unsigned int orc_compiler_powerpc_get_default_flags (void);
-void orc_compiler_powerpc_assemble (OrcCompiler *compiler);
-void orc_compiler_powerpc_register_rules (OrcTarget *target);
+void orc_compiler_powerpc_assemble (OrcCompiler * compiler);
+void orc_compiler_powerpc_register_rules (OrcTarget * target);
void
-powerpc_emit_prologue (OrcCompiler *compiler)
+powerpc_emit_prologue (OrcCompiler * compiler)
{
int i;
@@ -28,7 +28,7 @@ powerpc_emit_prologue (OrcCompiler *compiler)
powerpc_emit_stwu (compiler, POWERPC_R1, POWERPC_R1, -16);
- for(i=POWERPC_R13;i<=POWERPC_R31;i++){
+ for (i = POWERPC_R13; i <= POWERPC_R31; i++) {
if (compiler->used_regs[i]) {
//powerpc_emit_push (compiler, 4, i);
}
@@ -36,19 +36,19 @@ powerpc_emit_prologue (OrcCompiler *compiler)
}
void
-powerpc_emit_epilogue (OrcCompiler *compiler)
+powerpc_emit_epilogue (OrcCompiler * compiler)
{
int i;
- for(i=POWERPC_R31;i>=POWERPC_R31;i--){
+ for (i = POWERPC_R31; i >= POWERPC_R31; i--) {
if (compiler->used_regs[i]) {
//powerpc_emit_pop (compiler, 4, i);
}
}
powerpc_emit_addi (compiler, POWERPC_R1, POWERPC_R1, 16);
- ORC_ASM_CODE(compiler," blr\n");
- powerpc_emit(compiler, 0x4e800020);
+ ORC_ASM_CODE (compiler, " blr\n");
+ powerpc_emit (compiler, 0x4e800020);
}
static OrcTarget altivec_target = {
@@ -62,13 +62,12 @@ static OrcTarget altivec_target = {
orc_compiler_powerpc_get_default_flags,
orc_compiler_powerpc_init,
orc_compiler_powerpc_assemble,
- { { 0 } },
+ {{0}},
0,
NULL,
NULL,
NULL,
orc_powerpc_flush_cache
-
};
void
@@ -86,29 +85,29 @@ orc_compiler_powerpc_get_default_flags (void)
}
void
-orc_compiler_powerpc_init (OrcCompiler *compiler)
+orc_compiler_powerpc_init (OrcCompiler * compiler)
{
int i;
- for(i=0;i<32;i++){
- compiler->valid_regs[POWERPC_R0+i] = 1;
- compiler->valid_regs[POWERPC_V0+i] = 1;
+ for (i = 0; i < 32; i++) {
+ compiler->valid_regs[POWERPC_R0 + i] = 1;
+ compiler->valid_regs[POWERPC_V0 + i] = 1;
}
compiler->valid_regs[POWERPC_R0] = 0; /* used for temp space */
compiler->valid_regs[POWERPC_R1] = 0; /* stack pointer */
compiler->valid_regs[POWERPC_R2] = 0; /* TOC pointer */
compiler->valid_regs[POWERPC_R3] = 0; /* pointer to OrcExecutor */
- compiler->valid_regs[POWERPC_R13] = 0; /* reserved */
+ compiler->valid_regs[POWERPC_R13] = 0; /* reserved */
compiler->tmpreg = POWERPC_V0;
compiler->gp_tmpreg = POWERPC_R4;
compiler->valid_regs[compiler->tmpreg] = 0;
compiler->valid_regs[compiler->gp_tmpreg] = 0;
- for(i=14;i<32;i++){
+ for (i = 14; i < 32; i++) {
compiler->save_regs[POWERPC_R0 + i] = 1;
}
- for(i=20;i<32;i++){
+ for (i = 20; i < 32; i++) {
compiler->save_regs[POWERPC_V0 + i] = 1;
}
@@ -117,23 +116,23 @@ orc_compiler_powerpc_init (OrcCompiler *compiler)
}
void
-powerpc_load_inner_constants (OrcCompiler *compiler)
+powerpc_load_inner_constants (OrcCompiler * compiler)
{
int i;
- for(i=0;i<ORC_N_COMPILER_VARIABLES;i++){
- if (compiler->vars[i].name == NULL) continue;
+ for (i = 0; i < ORC_N_COMPILER_VARIABLES; i++) {
+ if (compiler->vars[i].name == NULL)
+ continue;
switch (compiler->vars[i].vartype) {
case ORC_VAR_TYPE_SRC:
case ORC_VAR_TYPE_DEST:
if (compiler->vars[i].ptr_register) {
powerpc_emit_lwz (compiler,
compiler->vars[i].ptr_register,
- POWERPC_R3,
- (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[i]));
+ POWERPC_R3, (int) ORC_STRUCT_OFFSET (OrcExecutor, arrays[i]));
} else {
/* FIXME */
- ORC_ASM_CODE(compiler,"ERROR");
+ ORC_ASM_CODE (compiler, "ERROR");
}
break;
default:
@@ -143,19 +142,20 @@ powerpc_load_inner_constants (OrcCompiler *compiler)
}
static int
-orc_program_has_float (OrcCompiler *compiler)
+orc_program_has_float (OrcCompiler * compiler)
{
int j;
- for(j=0;j<compiler->n_insns;j++){
+ for (j = 0; j < compiler->n_insns; j++) {
OrcInstruction *insn = compiler->insns + j;
OrcStaticOpcode *opcode = insn->opcode;
- if (opcode->flags & ORC_STATIC_OPCODE_FLOAT) return TRUE;
+ if (opcode->flags & ORC_STATIC_OPCODE_FLOAT)
+ return TRUE;
}
return FALSE;
}
void
-orc_compiler_powerpc_assemble (OrcCompiler *compiler)
+orc_compiler_powerpc_assemble (OrcCompiler * compiler)
{
int j;
int k;
@@ -179,74 +179,74 @@ orc_compiler_powerpc_assemble (OrcCompiler *compiler)
set_vscr = TRUE;
- ORC_ASM_CODE(compiler," vspltish %s, %d\n",
- powerpc_get_regname(tmp), 1);
- powerpc_emit_VX(compiler, 0x1000034c,
- powerpc_regnum(tmp), 1, 0);
+ ORC_ASM_CODE (compiler, " vspltish %s, %d\n",
+ powerpc_get_regname (tmp), 1);
+ powerpc_emit_VX (compiler, 0x1000034c, powerpc_regnum (tmp), 1, 0);
- powerpc_emit_VX_b(compiler, "mtvscr", 0x10000644, tmp);
+ powerpc_emit_VX_b (compiler, "mtvscr", 0x10000644, tmp);
}
if (compiler->program->is_2d) {
powerpc_emit_lwz (compiler, POWERPC_R0, POWERPC_R3,
- (int)ORC_STRUCT_OFFSET(OrcExecutorAlt, m));
+ (int) ORC_STRUCT_OFFSET (OrcExecutorAlt, m));
powerpc_emit_srawi (compiler, POWERPC_R0, POWERPC_R0,
compiler->loop_shift, 1);
powerpc_emit_beq (compiler, label_leave);
powerpc_emit_stw (compiler, POWERPC_R0, POWERPC_R3,
- (int)ORC_STRUCT_OFFSET(OrcExecutorAlt, m_index));
+ (int) ORC_STRUCT_OFFSET (OrcExecutorAlt, m_index));
}
-
//powerpc_load_constants (compiler);
powerpc_load_inner_constants (compiler);
- for(k=0;k<4;k++){
+ for (k = 0; k < 4; k++) {
OrcVariable *var = &compiler->vars[ORC_VAR_A1 + k];
- if (compiler->vars[ORC_VAR_A1 + k].name == NULL) continue;
+ if (compiler->vars[ORC_VAR_A1 + k].name == NULL)
+ continue;
- //powerpc_emit_VX_2(p, "vxor", 0x100004c4, reg, reg, reg);
+ //powerpc_emit_VX_2(p, "vxor", 0x100004c4, reg, reg, reg);
powerpc_emit_vxor (compiler, var->alloc, var->alloc, var->alloc);
}
powerpc_emit_label (compiler, label_outer_loop_start);
powerpc_emit_lwz (compiler, POWERPC_R0, POWERPC_R3,
- (int)ORC_STRUCT_OFFSET(OrcExecutor, n));
+ (int) ORC_STRUCT_OFFSET (OrcExecutor, n));
powerpc_emit_srawi (compiler, POWERPC_R0, POWERPC_R0,
compiler->loop_shift, 1);
powerpc_emit_beq (compiler, label_leave);
powerpc_emit (compiler, 0x7c0903a6);
- ORC_ASM_CODE (compiler, " mtctr %s\n", powerpc_get_regname(POWERPC_R0));
+ ORC_ASM_CODE (compiler, " mtctr %s\n", powerpc_get_regname (POWERPC_R0));
powerpc_emit_label (compiler, label_loop_start);
- for(j=0;j<compiler->n_insns;j++){
+ for (j = 0; j < compiler->n_insns; j++) {
insn = compiler->insns + j;
opcode = insn->opcode;
compiler->insn_index = j;
- ORC_ASM_CODE(compiler,"# %d: %s\n", j, insn->opcode->name);
+ ORC_ASM_CODE (compiler, "# %d: %s\n", j, insn->opcode->name);
#if 0
/* set up args */
- for(k=0;k<opcode->n_src + opcode->n_dest;k++){
+ for (k = 0; k < opcode->n_src + opcode->n_dest; k++) {
args[k] = compiler->vars + insn->args[k];
- ORC_ASM_CODE(compiler," %d", args[k]->alloc);
+ ORC_ASM_CODE (compiler, " %d", args[k]->alloc);
if (args[k]->is_chained) {
- ORC_ASM_CODE(compiler," (chained)");
+ ORC_ASM_CODE (compiler, " (chained)");
}
}
- ORC_ASM_CODE(compiler,"\n");
+ ORC_ASM_CODE (compiler, "\n");
#endif
- for(k=0;k<ORC_STATIC_OPCODE_N_SRC;k++){
+ for (k = 0; k < ORC_STATIC_OPCODE_N_SRC; k++) {
OrcVariable *var = compiler->vars + insn->src_args[k];
- if (opcode->src_size[k] == 0) continue;
+ if (opcode->src_size[k] == 0)
+ continue;
switch (var->vartype) {
case ORC_VAR_TYPE_SRC:
@@ -268,13 +268,14 @@ orc_compiler_powerpc_assemble (OrcCompiler *compiler)
if (rule) {
rule->emit (compiler, rule->emit_user, insn);
} else {
- ORC_ASM_CODE(compiler,"No rule for: %s\n", opcode->name);
+ ORC_ASM_CODE (compiler, "No rule for: %s\n", opcode->name);
}
- for(k=0;k<ORC_STATIC_OPCODE_N_DEST;k++){
+ for (k = 0; k < ORC_STATIC_OPCODE_N_DEST; k++) {
OrcVariable *var = compiler->vars + insn->dest_args[k];
- if (opcode->dest_size[k] == 0) continue;
+ if (opcode->dest_size[k] == 0)
+ continue;
switch (var->vartype) {
case ORC_VAR_TYPE_DEST:
@@ -288,8 +289,9 @@ orc_compiler_powerpc_assemble (OrcCompiler *compiler)
}
}
- for(k=0;k<ORC_N_COMPILER_VARIABLES;k++){
- if (compiler->vars[k].name == NULL) continue;
+ for (k = 0; k < ORC_N_COMPILER_VARIABLES; k++) {
+ if (compiler->vars[k].name == NULL)
+ continue;
if (compiler->vars[k].vartype == ORC_VAR_TYPE_SRC ||
compiler->vars[k].vartype == ORC_VAR_TYPE_DEST) {
if (compiler->vars[k].ptr_register) {
@@ -298,7 +300,7 @@ orc_compiler_powerpc_assemble (OrcCompiler *compiler)
compiler->vars[k].ptr_register,
compiler->vars[k].size << compiler->loop_shift);
} else {
- ORC_ASM_CODE(compiler,"ERROR\n");
+ ORC_ASM_CODE (compiler, "ERROR\n");
}
}
}
@@ -307,36 +309,33 @@ orc_compiler_powerpc_assemble (OrcCompiler *compiler)
if (compiler->program->is_2d) {
powerpc_emit_lwz (compiler, POWERPC_R0, POWERPC_R3,
- (int)ORC_STRUCT_OFFSET(OrcExecutorAlt, m_index));
+ (int) ORC_STRUCT_OFFSET (OrcExecutorAlt, m_index));
powerpc_emit_addi_rec (compiler, POWERPC_R0, POWERPC_R0, -1);
powerpc_emit_beq (compiler, label_leave);
powerpc_emit_stw (compiler, POWERPC_R0, POWERPC_R3,
- (int)ORC_STRUCT_OFFSET(OrcExecutorAlt, m_index));
+ (int) ORC_STRUCT_OFFSET (OrcExecutorAlt, m_index));
- for(k=0;k<ORC_N_COMPILER_VARIABLES;k++){
- if (compiler->vars[k].name == NULL) continue;
+ for (k = 0; k < ORC_N_COMPILER_VARIABLES; k++) {
+ if (compiler->vars[k].name == NULL)
+ continue;
if (compiler->vars[k].vartype == ORC_VAR_TYPE_SRC ||
compiler->vars[k].vartype == ORC_VAR_TYPE_DEST) {
if (compiler->vars[k].ptr_register) {
powerpc_emit_lwz (compiler,
compiler->vars[k].ptr_register,
- POWERPC_R3,
- (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[k]));
+ POWERPC_R3, (int) ORC_STRUCT_OFFSET (OrcExecutor, arrays[k]));
powerpc_emit_lwz (compiler,
POWERPC_R0,
- POWERPC_R3,
- (int)ORC_STRUCT_OFFSET(OrcExecutorAlt, strides[k]));
+ POWERPC_R3, (int) ORC_STRUCT_OFFSET (OrcExecutorAlt, strides[k]));
powerpc_emit_add (compiler,
compiler->vars[k].ptr_register,
- compiler->vars[k].ptr_register,
- POWERPC_R0);
+ compiler->vars[k].ptr_register, POWERPC_R0);
powerpc_emit_stw (compiler,
compiler->vars[k].ptr_register,
- POWERPC_R3,
- (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[k]));
+ POWERPC_R3, (int) ORC_STRUCT_OFFSET (OrcExecutor, arrays[k]));
} else {
- ORC_ASM_CODE(compiler,"ERROR\n");
+ ORC_ASM_CODE (compiler, "ERROR\n");
}
}
}
@@ -346,50 +345,45 @@ orc_compiler_powerpc_assemble (OrcCompiler *compiler)
powerpc_emit_label (compiler, label_leave);
- for(k=0;k<4;k++){
+ for (k = 0; k < 4; k++) {
OrcVariable *var = &compiler->vars[ORC_VAR_A1 + k];
- if (compiler->vars[ORC_VAR_A1 + k].name == NULL) continue;
+ if (compiler->vars[ORC_VAR_A1 + k].name == NULL)
+ continue;
powerpc_emit_addi (compiler,
POWERPC_R0,
- POWERPC_R3,
- (int)ORC_STRUCT_OFFSET(OrcExecutor, accumulators[k]));
+ POWERPC_R3, (int) ORC_STRUCT_OFFSET (OrcExecutor, accumulators[k]));
if (var->size == 2) {
powerpc_emit_vxor (compiler, POWERPC_V0, POWERPC_V0, POWERPC_V0);
powerpc_emit_vmrghh (compiler, var->alloc, POWERPC_V0, var->alloc);
}
- ORC_ASM_CODE(compiler," lvsr %s, 0, %s\n",
- powerpc_get_regname (POWERPC_V0),
- powerpc_get_regname (POWERPC_R0));
- powerpc_emit_X (compiler, 0x7c00004c, powerpc_regnum(POWERPC_V0),
- 0, powerpc_regnum(POWERPC_R0));
+ ORC_ASM_CODE (compiler, " lvsr %s, 0, %s\n",
+ powerpc_get_regname (POWERPC_V0), powerpc_get_regname (POWERPC_R0));
+ powerpc_emit_X (compiler, 0x7c00004c, powerpc_regnum (POWERPC_V0),
+ 0, powerpc_regnum (POWERPC_R0));
powerpc_emit_vperm (compiler, var->alloc, var->alloc, var->alloc,
POWERPC_V0);
- ORC_ASM_CODE(compiler," stvewx %s, 0, %s\n",
- powerpc_get_regname (var->alloc),
- powerpc_get_regname (POWERPC_R0));
+ ORC_ASM_CODE (compiler, " stvewx %s, 0, %s\n",
+ powerpc_get_regname (var->alloc), powerpc_get_regname (POWERPC_R0));
powerpc_emit_X (compiler, 0x7c00018e,
- powerpc_regnum(var->alloc),
- 0, powerpc_regnum(POWERPC_R0));
+ powerpc_regnum (var->alloc), 0, powerpc_regnum (POWERPC_R0));
}
if (set_vscr) {
int tmp = POWERPC_V0;
- ORC_ASM_CODE(compiler," vspltisw %s, %d\n",
- powerpc_get_regname(tmp), 0);
- powerpc_emit_VX(compiler, 0x1000038c,
- powerpc_regnum(tmp), 0, 0);
+ ORC_ASM_CODE (compiler, " vspltisw %s, %d\n",
+ powerpc_get_regname (tmp), 0);
+ powerpc_emit_VX (compiler, 0x1000038c, powerpc_regnum (tmp), 0, 0);
- powerpc_emit_VX_b(compiler, "mtvscr", 0x10000644, tmp);
+ powerpc_emit_VX_b (compiler, "mtvscr", 0x10000644, tmp);
}
powerpc_emit_epilogue (compiler);
powerpc_do_fixups (compiler);
}
-