summaryrefslogtreecommitdiff
path: root/compiler/utils/mips/assembler_mips.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2017-07-20 11:32:20 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2017-07-20 11:32:20 +0000
commit13c8343a3394414c90f2fcd1e8efff70e7d2387e (patch)
treec71c2e5775fe82242034c00d0a5c69c4116169bd /compiler/utils/mips/assembler_mips.cc
parent3579eb29f88a9fe4040e4d212e0acaa2e0690946 (diff)
parent4147fcc43c2ee019a06e55384985e3eaf82dcb8c (diff)
Merge "MIPS: Reduce Baker read barrier code size overhead"
Diffstat (limited to 'compiler/utils/mips/assembler_mips.cc')
-rw-r--r--compiler/utils/mips/assembler_mips.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/compiler/utils/mips/assembler_mips.cc b/compiler/utils/mips/assembler_mips.cc
index c581f1c58f..24e34508d1 100644
--- a/compiler/utils/mips/assembler_mips.cc
+++ b/compiler/utils/mips/assembler_mips.cc
@@ -828,6 +828,22 @@ void MipsAssembler::Aui(Register rt, Register rs, uint16_t imm16) {
DsFsmInstrRrr(EmitI(0xf, rs, rt, imm16), rt, rt, rs);
}
+void MipsAssembler::AddUpper(Register rt, Register rs, uint16_t imm16, Register tmp) {
+ bool increment = (rs == rt);
+ if (increment) {
+ CHECK_NE(rs, tmp);
+ }
+ if (IsR6()) {
+ Aui(rt, rs, imm16);
+ } else if (increment) {
+ Lui(tmp, imm16);
+ Addu(rt, rs, tmp);
+ } else {
+ Lui(rt, imm16);
+ Addu(rt, rs, rt);
+ }
+}
+
void MipsAssembler::Sync(uint32_t stype) {
DsFsmInstrNop(EmitR(0, ZERO, ZERO, ZERO, stype & 0x1f, 0xf));
}