summaryrefslogtreecommitdiff
path: root/chromium/v8/src/codegen/ppc/assembler-ppc.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/v8/src/codegen/ppc/assembler-ppc.h')
-rw-r--r--chromium/v8/src/codegen/ppc/assembler-ppc.h62
1 files changed, 50 insertions, 12 deletions
diff --git a/chromium/v8/src/codegen/ppc/assembler-ppc.h b/chromium/v8/src/codegen/ppc/assembler-ppc.h
index 778e94c1859..d8f1d8ef20d 100644
--- a/chromium/v8/src/codegen/ppc/assembler-ppc.h
+++ b/chromium/v8/src/codegen/ppc/assembler-ppc.h
@@ -435,9 +435,10 @@ class Assembler : public AssemblerBase {
inline void xx3_form(Instr instr, DoubleRegister t, DoubleRegister a,
DoubleRegister b) {
- int AX = ((a.code() & 0x20) >> 5) & 0x1;
- int BX = ((b.code() & 0x20) >> 5) & 0x1;
- int TX = ((t.code() & 0x20) >> 5) & 0x1;
+ // Using VR (high VSR) registers.
+ int AX = 1;
+ int BX = 1;
+ int TX = 1;
emit(instr | (t.code() & 0x1F) * B21 | (a.code() & 0x1F) * B16 |
(b.code() & 0x1F) * B11 | AX * B2 | BX * B1 | TX);
@@ -447,18 +448,59 @@ class Assembler : public AssemblerBase {
#undef DECLARE_PPC_XX3_INSTRUCTIONS
#define DECLARE_PPC_VX_INSTRUCTIONS_A_FORM(name, instr_name, instr_value) \
- inline void name(const DoubleRegister rt, const DoubleRegister rb, \
+ inline void name(const Simd128Register rt, const Simd128Register rb, \
const Operand& imm) { \
vx_form(instr_name, rt, rb, imm); \
}
+#define DECLARE_PPC_VX_INSTRUCTIONS_B_FORM(name, instr_name, instr_value) \
+ inline void name(const Simd128Register rt, const Simd128Register ra, \
+ const Simd128Register rb) { \
+ vx_form(instr_name, rt, ra, rb); \
+ }
- inline void vx_form(Instr instr, DoubleRegister rt, DoubleRegister rb,
+ inline void vx_form(Instr instr, Simd128Register rt, Simd128Register rb,
const Operand& imm) {
emit(instr | rt.code() * B21 | imm.immediate() * B16 | rb.code() * B11);
}
+ inline void vx_form(Instr instr, Simd128Register rt, Simd128Register ra,
+ Simd128Register rb) {
+ emit(instr | rt.code() * B21 | ra.code() * B16 | rb.code() * B11);
+ }
PPC_VX_OPCODE_A_FORM_LIST(DECLARE_PPC_VX_INSTRUCTIONS_A_FORM)
+ PPC_VX_OPCODE_B_FORM_LIST(DECLARE_PPC_VX_INSTRUCTIONS_B_FORM)
#undef DECLARE_PPC_VX_INSTRUCTIONS_A_FORM
+#undef DECLARE_PPC_VX_INSTRUCTIONS_B_FORM
+
+#define DECLARE_PPC_VA_INSTRUCTIONS_A_FORM(name, instr_name, instr_value) \
+ inline void name(const Simd128Register rt, const Simd128Register ra, \
+ const Simd128Register rb, const Simd128Register rc) { \
+ va_form(instr_name, rt, ra, rb, rc); \
+ }
+
+ inline void va_form(Instr instr, Simd128Register rt, Simd128Register ra,
+ Simd128Register rb, Simd128Register rc) {
+ emit(instr | rt.code() * B21 | ra.code() * B16 | rb.code() * B11 |
+ rc.code() * B6);
+ }
+
+ PPC_VA_OPCODE_A_FORM_LIST(DECLARE_PPC_VA_INSTRUCTIONS_A_FORM)
+#undef DECLARE_PPC_VA_INSTRUCTIONS_A_FORM
+
+#define DECLARE_PPC_VC_INSTRUCTIONS(name, instr_name, instr_value) \
+ inline void name(const Simd128Register rt, const Simd128Register ra, \
+ const Simd128Register rb, const RCBit rc = LeaveRC) { \
+ vc_form(instr_name, rt, ra, rb, rc); \
+ }
+
+ inline void vc_form(Instr instr, Simd128Register rt, Simd128Register ra,
+ Simd128Register rb, int rc) {
+ emit(instr | rt.code() * B21 | ra.code() * B16 | rb.code() * B11 |
+ rc * B10);
+ }
+
+ PPC_VC_OPCODE_LIST(DECLARE_PPC_VC_INSTRUCTIONS)
+#undef DECLARE_PPC_VC_INSTRUCTIONS
RegList* GetScratchRegisterList() { return &scratch_register_list_; }
// ---------------------------------------------------------------------------
@@ -947,13 +989,9 @@ class Assembler : public AssemblerBase {
RCBit rc = LeaveRC);
// Vector instructions
- void mfvsrd(const Register ra, const DoubleRegister r);
- void mfvsrwz(const Register ra, const DoubleRegister r);
- void mtvsrd(const DoubleRegister rt, const Register ra);
- void vor(const DoubleRegister rt, const DoubleRegister ra,
- const DoubleRegister rb);
- void vsro(const DoubleRegister rt, const DoubleRegister ra,
- const DoubleRegister rb);
+ void mfvsrd(const Register ra, const Simd128Register r);
+ void mfvsrwz(const Register ra, const Simd128Register r);
+ void mtvsrd(const Simd128Register rt, const Register ra);
// Pseudo instructions