Commit 23c646c2 authored by Rob Pike's avatar Rob Pike Committed by Andrew Gerrand

[release-branch.go1.5] cmd/asm: handle CMPF and CMPD on ARM

These instructions are special cases that were missed in the translation.
The second argument must go into the Reg field not the To field.

Fixes #12458

For Go 1.5.1

Change-Id: Iad57c60c7e38e3bcfafda483ed5037ce670e8816
Reviewed-on: https://go-review.googlesource.com/14183Reviewed-by: default avatarDave Cheney <dave@cheney.net>
Reviewed-by: default avatarRuss Cox <rsc@golang.org>
Reviewed-on: https://go-review.googlesource.com/14358Reviewed-by: default avatarChris Broadfoot <cbro@golang.org>
Reviewed-by: default avatarRob Pike <r@golang.org>
parent 71387ff5
......@@ -121,6 +121,15 @@ func IsARMMRC(op int) bool {
return false
}
// IsARMFloatCmp reports whether the op is a floating comparison instruction.
func IsARMFloatCmp(op int) bool {
switch op {
case arm.ACMPF, arm.ACMPD:
return true
}
return false
}
// ARMMRCOffset implements the peculiar encoding of the MRC and MCR instructions.
// The difference between MRC and MCR is represented by a bit high in the word, not
// in the usual way by the opcode itself. Asm must use AMRC for both instructions, so
......
......@@ -463,6 +463,11 @@ func (p *Parser) asmInstruction(op int, cond string, a []obj.Addr) {
}
p.errorf("unrecognized addressing for %s", obj.Aconv(op))
}
if arch.IsARMFloatCmp(op) {
prog.From = a[0]
prog.Reg = p.getRegister(prog, op, &a[1])
break
}
} else if p.arch.Thechar == '7' && arch.IsARM64CMP(op) {
prog.From = a[0]
prog.Reg = p.getRegister(prog, op, &a[1])
......
......@@ -56,4 +56,6 @@
281 00056 (testdata/arm.s:281) CALL foo(SB)
282 00057 (testdata/arm.s:282) JMP foo(SB)
283 00058 (testdata/arm.s:283) CALL foo(SB)
292 00059 (testdata/arm.s:292) END
286 00059 (testdata/arm.s:286) CMPF F1, F2
287 00060 (testdata/arm.s:287) CMPD F1, F2
296 00061 (testdata/arm.s:296) END
......@@ -282,6 +282,10 @@ TEXT foo(SB), 0, $0
JMP foo(SB)
CALL foo(SB)
// CMPF and CMPD are special.
CMPF F1, F2
CMPD F1, F2
//
// END
//
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment