summaryrefslogtreecommitdiff
path: root/Source/Core/DSPCore/Src/DspIntLoadStore.cpp
diff options
context:
space:
mode:
authorpierre <pierre@pirsoft.de>2010-12-29 02:12:06 +0000
committerpierre <pierre@pirsoft.de>2010-12-29 02:12:06 +0000
commitfc1db5eaa0b6caf2797d6250fa7a7bce1cfe4dbe (patch)
treeb652d2cdcd5f5d33a5f70164abd787f698d9c606 /Source/Core/DSPCore/Src/DspIntLoadStore.cpp
parent0059b0f44f6af976fa1b17cea932b3d828d58e3c (diff)
Core/DSPCore: Reorganize register layout for accessing accumulators
(acc and ax) and product register with one read/write. Gives a minuscule speedup of not more than 4%. In exchange, breaks all your out-of-tree changes to dsp. Tests are not building again, yet. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6680 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/DSPCore/Src/DspIntLoadStore.cpp')
-rw-r--r--Source/Core/DSPCore/Src/DspIntLoadStore.cpp44
1 files changed, 22 insertions, 22 deletions
diff --git a/Source/Core/DSPCore/Src/DspIntLoadStore.cpp b/Source/Core/DSPCore/Src/DspIntLoadStore.cpp
index 443107a6a7..272e7dff3f 100644
--- a/Source/Core/DSPCore/Src/DspIntLoadStore.cpp
+++ b/Source/Core/DSPCore/Src/DspIntLoadStore.cpp
@@ -33,10 +33,10 @@ namespace DSPInterpreter {
void srs(const UDSPInstruction opc)
{
u8 reg = ((opc >> 8) & 0x7) + 0x18;
- u16 addr = (g_dsp.r[DSP_REG_CR] << 8) | (opc & 0xFF);
- dsp_dmem_write(addr, g_dsp.r[reg]);
+ u16 addr = (g_dsp._r.cr << 8) | (opc & 0xFF);
+ dsp_dmem_write(addr, dsp_op_read_reg(reg));
}
-
+
// LRS $(0x18+D), @M
// 0010 0ddd mmmm mmmm
// Move value from data memory pointed by address CR[0-7] | M to register
@@ -45,8 +45,8 @@ void srs(const UDSPInstruction opc)
void lrs(const UDSPInstruction opc)
{
u8 reg = ((opc >> 8) & 0x7) + 0x18;
- u16 addr = (g_dsp.r[DSP_REG_CR] << 8) | (opc & 0xFF);
- g_dsp.r[reg] = dsp_dmem_read(addr);
+ u16 addr = (g_dsp._r.cr << 8) | (opc & 0xFF);
+ dsp_op_write_reg(reg, dsp_dmem_read(addr));
dsp_conditional_extend_accum(reg);
}
@@ -116,7 +116,7 @@ void lrrd(const UDSPInstruction opc)
u16 val = dsp_dmem_read(dsp_op_read_reg(sreg));
dsp_op_write_reg(dreg, val);
dsp_conditional_extend_accum(dreg);
- g_dsp.r[sreg] = dsp_decrement_addr_reg(sreg);
+ g_dsp._r.ar[sreg] = dsp_decrement_addr_reg(sreg);
}
// LRRI $D, @$S
@@ -132,7 +132,7 @@ void lrri(const UDSPInstruction opc)
u16 val = dsp_dmem_read(dsp_op_read_reg(sreg));
dsp_op_write_reg(dreg, val);
dsp_conditional_extend_accum(dreg);
- g_dsp.r[sreg] = dsp_increment_addr_reg(sreg);
+ g_dsp._r.ar[sreg] = dsp_increment_addr_reg(sreg);
}
// LRRN $D, @$S
@@ -148,7 +148,7 @@ void lrrn(const UDSPInstruction opc)
u16 val = dsp_dmem_read(dsp_op_read_reg(sreg));
dsp_op_write_reg(dreg, val);
dsp_conditional_extend_accum(dreg);
- g_dsp.r[sreg] = dsp_increase_addr_reg(sreg, (s16)g_dsp.r[DSP_REG_IX0 + sreg]);
+ g_dsp._r.ar[sreg] = dsp_increase_addr_reg(sreg, (s16)g_dsp._r.ix[sreg]);
}
// SRR @$D, $S
@@ -162,7 +162,7 @@ void srr(const UDSPInstruction opc)
u8 sreg = opc & 0x1f;
u16 val = dsp_op_read_reg(sreg);
- dsp_dmem_write(g_dsp.r[dreg], val);
+ dsp_dmem_write(g_dsp._r.ar[dreg], val);
}
// SRRD @$D, $S
@@ -176,8 +176,8 @@ void srrd(const UDSPInstruction opc)
u8 sreg = opc & 0x1f;
u16 val = dsp_op_read_reg(sreg);
- dsp_dmem_write(g_dsp.r[dreg], val);
- g_dsp.r[dreg] = dsp_decrement_addr_reg(dreg);
+ dsp_dmem_write(g_dsp._r.ar[dreg], val);
+ g_dsp._r.ar[dreg] = dsp_decrement_addr_reg(dreg);
}
// SRRI @$D, $S
@@ -192,8 +192,8 @@ void srri(const UDSPInstruction opc)
u16 val = dsp_op_read_reg(sreg);
- dsp_dmem_write(g_dsp.r[dreg], val);
- g_dsp.r[dreg] = dsp_increment_addr_reg(dreg);
+ dsp_dmem_write(g_dsp._r.ar[dreg], val);
+ g_dsp._r.ar[dreg] = dsp_increment_addr_reg(dreg);
}
// SRRN @$D, $S
@@ -207,8 +207,8 @@ void srrn(const UDSPInstruction opc)
u8 sreg = opc & 0x1f;
u16 val = dsp_op_read_reg(sreg);
- dsp_dmem_write(g_dsp.r[dreg], val);
- g_dsp.r[dreg] = dsp_increase_addr_reg(dreg, (s16)g_dsp.r[DSP_REG_IX0 + dreg]);
+ dsp_dmem_write(g_dsp._r.ar[dreg], val);
+ g_dsp._r.ar[dreg] = dsp_increase_addr_reg(dreg, (s16)g_dsp._r.ix[dreg]);
}
// ILRR $acD.m, @$arS
@@ -220,7 +220,7 @@ void ilrr(const UDSPInstruction opc)
u16 reg = opc & 0x3;
u16 dreg = DSP_REG_ACM0 + ((opc >> 8) & 1);
- g_dsp.r[dreg] = dsp_imem_read(g_dsp.r[reg]);
+ g_dsp._r.ac[dreg-DSP_REG_ACM0].m = dsp_imem_read(g_dsp._r.ar[reg]);
dsp_conditional_extend_accum(dreg);
}
@@ -233,9 +233,9 @@ void ilrrd(const UDSPInstruction opc)
u16 reg = opc & 0x3;
u16 dreg = DSP_REG_ACM0 + ((opc >> 8) & 1);
- g_dsp.r[dreg] = dsp_imem_read(g_dsp.r[reg]);
+ g_dsp._r.ac[dreg-DSP_REG_ACM0].m = dsp_imem_read(g_dsp._r.ar[reg]);
dsp_conditional_extend_accum(dreg);
- g_dsp.r[reg] = dsp_decrement_addr_reg(reg);
+ g_dsp._r.ar[reg] = dsp_decrement_addr_reg(reg);
}
// ILRRI $acD.m, @$S
@@ -247,9 +247,9 @@ void ilrri(const UDSPInstruction opc)
u16 reg = opc & 0x3;
u16 dreg = DSP_REG_ACM0 + ((opc >> 8) & 1);
- g_dsp.r[dreg] = dsp_imem_read(g_dsp.r[reg]);
+ g_dsp._r.ac[dreg-DSP_REG_ACM0].m = dsp_imem_read(g_dsp._r.ar[reg]);
dsp_conditional_extend_accum(dreg);
- g_dsp.r[reg] = dsp_increment_addr_reg(reg);
+ g_dsp._r.ar[reg] = dsp_increment_addr_reg(reg);
}
// ILRRN $acD.m, @$arS
@@ -262,9 +262,9 @@ void ilrrn(const UDSPInstruction opc)
u16 reg = opc & 0x3;
u16 dreg = DSP_REG_ACM0 + ((opc >> 8) & 1);
- g_dsp.r[dreg] = dsp_imem_read(g_dsp.r[reg]);
+ g_dsp._r.ac[dreg-DSP_REG_ACM0].m = dsp_imem_read(g_dsp._r.ar[reg]);
dsp_conditional_extend_accum(dreg);
- g_dsp.r[reg] = dsp_increase_addr_reg(reg, (s16)g_dsp.r[DSP_REG_IX0 + reg]);
+ g_dsp._r.ar[reg] = dsp_increase_addr_reg(reg, (s16)g_dsp._r.ix[reg]);
}
} // namespace