| Index: src/arm/assembler-arm.h
|
| ===================================================================
|
| --- src/arm/assembler-arm.h (revision 3427)
|
| +++ src/arm/assembler-arm.h (working copy)
|
| @@ -103,58 +103,95 @@
|
| extern Register lr;
|
| extern Register pc;
|
|
|
| -// Support for VFP registers s0 to s32 (d0 to d16).
|
| -// Note that "sN:sM" is the same as "dN/2".
|
| -extern Register s0;
|
| -extern Register s1;
|
| -extern Register s2;
|
| -extern Register s3;
|
| -extern Register s4;
|
| -extern Register s5;
|
| -extern Register s6;
|
| -extern Register s7;
|
| -extern Register s8;
|
| -extern Register s9;
|
| -extern Register s10;
|
| -extern Register s11;
|
| -extern Register s12;
|
| -extern Register s13;
|
| -extern Register s14;
|
| -extern Register s15;
|
| -extern Register s16;
|
| -extern Register s17;
|
| -extern Register s18;
|
| -extern Register s19;
|
| -extern Register s20;
|
| -extern Register s21;
|
| -extern Register s22;
|
| -extern Register s23;
|
| -extern Register s24;
|
| -extern Register s25;
|
| -extern Register s26;
|
| -extern Register s27;
|
| -extern Register s28;
|
| -extern Register s29;
|
| -extern Register s30;
|
| -extern Register s31;
|
|
|
| -extern Register d0;
|
| -extern Register d1;
|
| -extern Register d2;
|
| -extern Register d3;
|
| -extern Register d4;
|
| -extern Register d5;
|
| -extern Register d6;
|
| -extern Register d7;
|
| -extern Register d8;
|
| -extern Register d9;
|
| -extern Register d10;
|
| -extern Register d11;
|
| -extern Register d12;
|
| -extern Register d13;
|
| -extern Register d14;
|
| -extern Register d15;
|
| +// Single word VFP register.
|
| +struct SwVfpRegister {
|
| + bool is_valid() const { return 0 <= code_ && code_ < 32; }
|
| + bool is(SwVfpRegister reg) const { return code_ == reg.code_; }
|
| + int code() const {
|
| + ASSERT(is_valid());
|
| + return code_;
|
| + }
|
| + int bit() const {
|
| + ASSERT(is_valid());
|
| + return 1 << code_;
|
| + }
|
|
|
| + int code_;
|
| +};
|
| +
|
| +
|
| +// Double word VFP register.
|
| +struct DwVfpRegister {
|
| + // Supporting d0 to d15, can be later extended to d31.
|
| + bool is_valid() const { return 0 <= code_ && code_ < 16; }
|
| + bool is(DwVfpRegister reg) const { return code_ == reg.code_; }
|
| + int code() const {
|
| + ASSERT(is_valid());
|
| + return code_;
|
| + }
|
| + int bit() const {
|
| + ASSERT(is_valid());
|
| + return 1 << code_;
|
| + }
|
| +
|
| + int code_;
|
| +};
|
| +
|
| +
|
| +// Support for VFP registers s0 to s31 (d0 to d15).
|
| +// Note that "s(N):s(N+1)" is the same as "d(N/2)".
|
| +extern SwVfpRegister s0;
|
| +extern SwVfpRegister s1;
|
| +extern SwVfpRegister s2;
|
| +extern SwVfpRegister s3;
|
| +extern SwVfpRegister s4;
|
| +extern SwVfpRegister s5;
|
| +extern SwVfpRegister s6;
|
| +extern SwVfpRegister s7;
|
| +extern SwVfpRegister s8;
|
| +extern SwVfpRegister s9;
|
| +extern SwVfpRegister s10;
|
| +extern SwVfpRegister s11;
|
| +extern SwVfpRegister s12;
|
| +extern SwVfpRegister s13;
|
| +extern SwVfpRegister s14;
|
| +extern SwVfpRegister s15;
|
| +extern SwVfpRegister s16;
|
| +extern SwVfpRegister s17;
|
| +extern SwVfpRegister s18;
|
| +extern SwVfpRegister s19;
|
| +extern SwVfpRegister s20;
|
| +extern SwVfpRegister s21;
|
| +extern SwVfpRegister s22;
|
| +extern SwVfpRegister s23;
|
| +extern SwVfpRegister s24;
|
| +extern SwVfpRegister s25;
|
| +extern SwVfpRegister s26;
|
| +extern SwVfpRegister s27;
|
| +extern SwVfpRegister s28;
|
| +extern SwVfpRegister s29;
|
| +extern SwVfpRegister s30;
|
| +extern SwVfpRegister s31;
|
| +
|
| +extern DwVfpRegister d0;
|
| +extern DwVfpRegister d1;
|
| +extern DwVfpRegister d2;
|
| +extern DwVfpRegister d3;
|
| +extern DwVfpRegister d4;
|
| +extern DwVfpRegister d5;
|
| +extern DwVfpRegister d6;
|
| +extern DwVfpRegister d7;
|
| +extern DwVfpRegister d8;
|
| +extern DwVfpRegister d9;
|
| +extern DwVfpRegister d10;
|
| +extern DwVfpRegister d11;
|
| +extern DwVfpRegister d12;
|
| +extern DwVfpRegister d13;
|
| +extern DwVfpRegister d14;
|
| +extern DwVfpRegister d15;
|
| +
|
| +
|
| // Coprocessor register
|
| struct CRegister {
|
| bool is_valid() const { return 0 <= code_ && code_ < 16; }
|
| @@ -759,55 +796,45 @@
|
| // However, some simple modifications can allow
|
| // these APIs to support D16 to D31.
|
|
|
| - void fmdrr(const Register dst,
|
| - const Register src1,
|
| - const Register src2,
|
| - const SBit s = LeaveCC,
|
| - const Condition cond = al);
|
| - void fmrrd(const Register dst1,
|
| - const Register dst2,
|
| - const Register src,
|
| - const SBit s = LeaveCC,
|
| - const Condition cond = al);
|
| - void fmsr(const Register dst,
|
| - const Register src,
|
| - const SBit s = LeaveCC,
|
| + void vmov(const DwVfpRegister dst,
|
| + const Register src1,
|
| + const Register src2,
|
| const Condition cond = al);
|
| - void fmrs(const Register dst,
|
| + void vmov(const Register dst1,
|
| + const Register dst2,
|
| + const DwVfpRegister src,
|
| + const Condition cond = al);
|
| + void vmov(const SwVfpRegister dst,
|
| const Register src,
|
| - const SBit s = LeaveCC,
|
| const Condition cond = al);
|
| - void fsitod(const Register dst,
|
| - const Register src,
|
| - const SBit s = LeaveCC,
|
| - const Condition cond = al);
|
| - void ftosid(const Register dst,
|
| - const Register src,
|
| - const SBit s = LeaveCC,
|
| - const Condition cond = al);
|
| + void vmov(const Register dst,
|
| + const SwVfpRegister src,
|
| + const Condition cond = al);
|
| + void vcvt(const DwVfpRegister dst,
|
| + const SwVfpRegister src,
|
| + const Condition cond = al);
|
| + void vcvt(const SwVfpRegister dst,
|
| + const DwVfpRegister src,
|
| + const Condition cond = al);
|
|
|
| - void faddd(const Register dst,
|
| - const Register src1,
|
| - const Register src2,
|
| - const SBit s = LeaveCC,
|
| - const Condition cond = al);
|
| - void fsubd(const Register dst,
|
| - const Register src1,
|
| - const Register src2,
|
| - const SBit s = LeaveCC,
|
| - const Condition cond = al);
|
| - void fmuld(const Register dst,
|
| - const Register src1,
|
| - const Register src2,
|
| - const SBit s = LeaveCC,
|
| - const Condition cond = al);
|
| - void fdivd(const Register dst,
|
| - const Register src1,
|
| - const Register src2,
|
| - const SBit s = LeaveCC,
|
| - const Condition cond = al);
|
| - void fcmp(const Register src1,
|
| - const Register src2,
|
| + void vadd(const DwVfpRegister dst,
|
| + const DwVfpRegister src1,
|
| + const DwVfpRegister src2,
|
| + const Condition cond = al);
|
| + void vsub(const DwVfpRegister dst,
|
| + const DwVfpRegister src1,
|
| + const DwVfpRegister src2,
|
| + const Condition cond = al);
|
| + void vmul(const DwVfpRegister dst,
|
| + const DwVfpRegister src1,
|
| + const DwVfpRegister src2,
|
| + const Condition cond = al);
|
| + void vdiv(const DwVfpRegister dst,
|
| + const DwVfpRegister src1,
|
| + const DwVfpRegister src2,
|
| + const Condition cond = al);
|
| + void vcmp(const DwVfpRegister src1,
|
| + const DwVfpRegister src2,
|
| const SBit s = LeaveCC,
|
| const Condition cond = al);
|
| void vmrs(const Register dst,
|
|
|