diff options
| author | 2015-10-28 10:08:56 -0700 | |
|---|---|---|
| committer | 2015-11-18 12:24:59 -0800 | |
| commit | 3f8bf65f36e14650bb6eb6876a42d9344a9d64d9 (patch) | |
| tree | 2cca6628f091f02775519b6610d1cd176ea1327b /compiler/utils | |
| parent | f66f05ddfceaa8a2f613d3ed8316a21c95e1fbca (diff) | |
MIPS32: Miscellaneous bit manipulations routines:
- short java.lang.Short.reverseBytes(short)
- int java.lang.Integer.reverseBytes(int)
- long java.lang.Long.reverseBytes(long)
- float java.lang.Float.intBitsToFloat(int)
- double java.lang.Double.longBitsToDouble(long)
- int java.lang.Float.floatToRawIntBits(float)
- long java.lang.Double.doubleToRawLongBits(double)
Change-Id: Id9803349d465c28756820e90e2cbe633f3f40a44
Diffstat (limited to 'compiler/utils')
| -rw-r--r-- | compiler/utils/mips/assembler_mips.cc | 12 | ||||
| -rw-r--r-- | compiler/utils/mips/assembler_mips.h | 2 |
2 files changed, 14 insertions, 0 deletions
diff --git a/compiler/utils/mips/assembler_mips.cc b/compiler/utils/mips/assembler_mips.cc index aee64120a8..fc7ac7061a 100644 --- a/compiler/utils/mips/assembler_mips.cc +++ b/compiler/utils/mips/assembler_mips.cc @@ -310,15 +310,27 @@ void MipsAssembler::Seh(Register rd, Register rt) { EmitR(0x1f, static_cast<Register>(0), rt, rd, 0x18, 0x20); } +void MipsAssembler::Wsbh(Register rd, Register rt) { + EmitR(0x1f, static_cast<Register>(0), rt, rd, 2, 0x20); +} + void MipsAssembler::Sll(Register rd, Register rt, int shamt) { + CHECK(IsUint<5>(shamt)) << shamt; EmitR(0, static_cast<Register>(0), rt, rd, shamt, 0x00); } void MipsAssembler::Srl(Register rd, Register rt, int shamt) { + CHECK(IsUint<5>(shamt)) << shamt; EmitR(0, static_cast<Register>(0), rt, rd, shamt, 0x02); } +void MipsAssembler::Rotr(Register rd, Register rt, int shamt) { + CHECK(IsUint<5>(shamt)) << shamt; + EmitR(0, static_cast<Register>(1), rt, rd, shamt, 0x02); +} + void MipsAssembler::Sra(Register rd, Register rt, int shamt) { + CHECK(IsUint<5>(shamt)) << shamt; EmitR(0, static_cast<Register>(0), rt, rd, shamt, 0x03); } diff --git a/compiler/utils/mips/assembler_mips.h b/compiler/utils/mips/assembler_mips.h index 4038c1f1c4..1ef0992dac 100644 --- a/compiler/utils/mips/assembler_mips.h +++ b/compiler/utils/mips/assembler_mips.h @@ -135,9 +135,11 @@ class MipsAssembler FINAL : public Assembler { void Seb(Register rd, Register rt); // R2+ void Seh(Register rd, Register rt); // R2+ + void Wsbh(Register rd, Register rt); // R2+ void Sll(Register rd, Register rt, int shamt); void Srl(Register rd, Register rt, int shamt); + void Rotr(Register rd, Register rt, int shamt); // R2+ void Sra(Register rd, Register rt, int shamt); void Sllv(Register rd, Register rt, Register rs); void Srlv(Register rd, Register rt, Register rs); |