summaryrefslogtreecommitdiff
path: root/compiler/utils
diff options
context:
space:
mode:
author Chris Larsen <chris.larsen@imgtec.com> 2015-10-28 10:08:56 -0700
committer Chris Larsen <chris.larsen@imgtec.com> 2015-11-18 12:24:59 -0800
commit3f8bf65f36e14650bb6eb6876a42d9344a9d64d9 (patch)
tree2cca6628f091f02775519b6610d1cd176ea1327b /compiler/utils
parentf66f05ddfceaa8a2f613d3ed8316a21c95e1fbca (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.cc12
-rw-r--r--compiler/utils/mips/assembler_mips.h2
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);