| Index: src/arm/assembler-arm.h
|
| diff --git a/src/arm/assembler-arm.h b/src/arm/assembler-arm.h
|
| index 1283c3984a6454a5faa033df5a844a63a7f39a4d..32d79a39e0a52398ad577082bc1c5c938d0fab64 100644
|
| --- a/src/arm/assembler-arm.h
|
| +++ b/src/arm/assembler-arm.h
|
| @@ -302,6 +302,20 @@ struct QwNeonRegister {
|
| *m = (encoded_code & 0x10) >> 4;
|
| *vm = encoded_code & 0x0F;
|
| }
|
| + DwVfpRegister low() const {
|
| + DwVfpRegister reg;
|
| + reg.reg_code = reg_code * 2;
|
| +
|
| + DCHECK(reg.is_valid());
|
| + return reg;
|
| + }
|
| + DwVfpRegister high() const {
|
| + DwVfpRegister reg;
|
| + reg.reg_code = reg_code * 2 + 1;
|
| +
|
| + DCHECK(reg.is_valid());
|
| + return reg;
|
| + }
|
|
|
| int reg_code;
|
| };
|
| @@ -405,6 +419,7 @@ const QwNeonRegister q15 = { 15 };
|
| #define kLastCalleeSavedDoubleReg d15
|
| #define kDoubleRegZero d14
|
| #define kScratchDoubleReg d15
|
| +#define kScratchQuadReg q7 // After use, kDoubleRegZero must be reset to 0.
|
|
|
|
|
| // Coprocessor register
|
| @@ -1133,6 +1148,8 @@ class Assembler : public AssemblerBase {
|
| void vmov(const DwVfpRegister dst,
|
| const DwVfpRegister src,
|
| const Condition cond = al);
|
| + void vmov(const QwNeonRegister dst,
|
| + const QwNeonRegister src);
|
| void vmov(const DwVfpRegister dst,
|
| const VmovIndex index,
|
| const Register src,
|
| @@ -1313,8 +1330,8 @@ class Assembler : public AssemblerBase {
|
| const NeonMemOperand& dst);
|
| void vmovl(NeonDataType dt, QwNeonRegister dst, DwVfpRegister src);
|
|
|
| - // Currently, vswp supports only D0 to D31.
|
| - void vswp(DwVfpRegister srcdst0, DwVfpRegister srcdst1);
|
| + void vswp(DwVfpRegister dst, DwVfpRegister src);
|
| + void vswp(QwNeonRegister dst, QwNeonRegister src);
|
|
|
| // Pseudo instructions
|
|
|
| @@ -1611,6 +1628,12 @@ class Assembler : public AssemblerBase {
|
| (reg.reg_code < LowDwVfpRegister::kMaxNumLowRegisters);
|
| }
|
|
|
| + bool VfpRegisterIsAvailable(QwNeonRegister reg) {
|
| + DCHECK(reg.is_valid());
|
| + return IsEnabled(VFP32DREGS) ||
|
| + (reg.reg_code < LowDwVfpRegister::kMaxNumLowRegisters / 2);
|
| + }
|
| +
|
| private:
|
| int next_buffer_check_; // pc offset of next buffer check
|
|
|
|
|