Index: src/s390/assembler-s390.h |
diff --git a/src/s390/assembler-s390.h b/src/s390/assembler-s390.h |
index 10cbaa8f0d6d7b832746f4b4c45e7bc8e2ecfc3a..f8528e66de65a705b19738f6f6ec420897a0207e 100644 |
--- a/src/s390/assembler-s390.h |
+++ b/src/s390/assembler-s390.h |
@@ -758,6 +758,55 @@ class Assembler : public AssemblerBase { |
void name(Register r3, Register b1, Disp d1, Register b2, Disp d2); \ |
void name(Register r3, const MemOperand& opnd1, const MemOperand& opnd2) |
+#define DECLARE_VRR_A_INSTRUCTIONS(name, opcode_name, opcode_value) \ |
+ void name(DoubleRegister v1, DoubleRegister v2, Condition m5, Condition m4, \ |
+ Condition m3) { \ |
+ uint64_t code = (static_cast<uint64_t>(opcode_value & 0xFF00)) * B32 | \ |
+ (static_cast<uint64_t>(v1.code())) * B36 | \ |
+ (static_cast<uint64_t>(v2.code())) * B32 | \ |
+ (static_cast<uint64_t>(m5 & 0xF)) * B20 | \ |
+ (static_cast<uint64_t>(m4 & 0xF)) * B16 | \ |
+ (static_cast<uint64_t>(m3 & 0xF)) * B12 | \ |
+ (static_cast<uint64_t>(opcode_value & 0x00FF)); \ |
+ emit6bytes(code); \ |
+ } |
+ VRR_A_OPCODE_LIST(DECLARE_VRR_A_INSTRUCTIONS) |
+#undef DECLARE_VRR_A_INSTRUCTIONS |
+ |
+#define DECLARE_VRR_C_INSTRUCTIONS(name, opcode_name, opcode_value) \ |
+ void name(DoubleRegister v1, DoubleRegister v2, DoubleRegister v3, \ |
+ Condition m6, Condition m5, Condition m4) { \ |
+ uint64_t code = (static_cast<uint64_t>(opcode_value & 0xFF00)) * B32 | \ |
+ (static_cast<uint64_t>(v1.code())) * B36 | \ |
+ (static_cast<uint64_t>(v2.code())) * B32 | \ |
+ (static_cast<uint64_t>(v3.code())) * B28 | \ |
+ (static_cast<uint64_t>(m6 & 0xF)) * B20 | \ |
+ (static_cast<uint64_t>(m5 & 0xF)) * B16 | \ |
+ (static_cast<uint64_t>(m4 & 0xF)) * B12 | \ |
+ (static_cast<uint64_t>(opcode_value & 0x00FF)); \ |
+ emit6bytes(code); \ |
+ } |
+ VRR_C_OPCODE_LIST(DECLARE_VRR_C_INSTRUCTIONS) |
+#undef DECLARE_VRR_C_INSTRUCTIONS |
+ |
+ // Single Element format |
+ void vfa(DoubleRegister v1, DoubleRegister v2, DoubleRegister v3) { |
+ vfa(v1, v2, v3, static_cast<Condition>(0), static_cast<Condition>(8), |
+ static_cast<Condition>(3)); |
+ } |
+ void vfs(DoubleRegister v1, DoubleRegister v2, DoubleRegister v3) { |
+ vfs(v1, v2, v3, static_cast<Condition>(0), static_cast<Condition>(8), |
+ static_cast<Condition>(3)); |
+ } |
+ void vfm(DoubleRegister v1, DoubleRegister v2, DoubleRegister v3) { |
+ vfm(v1, v2, v3, static_cast<Condition>(0), static_cast<Condition>(8), |
+ static_cast<Condition>(3)); |
+ } |
+ void vfd(DoubleRegister v1, DoubleRegister v2, DoubleRegister v3) { |
+ vfd(v1, v2, v3, static_cast<Condition>(0), static_cast<Condition>(8), |
+ static_cast<Condition>(3)); |
+ } |
+ |
// S390 instruction sets |
RX_FORM(bc); |
RR_FORM(bctr); |