]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/ppc64: Fix RLDIMI
authorCarlos Eduardo Seo <cseo@linux.vnet.ibm.com>
Thu, 16 Feb 2017 16:58:47 +0000 (14:58 -0200)
committerLynn Boger <laboger@linux.vnet.ibm.com>
Wed, 22 Feb 2017 20:29:48 +0000 (20:29 +0000)
Fix the encoding of the SH field for rldimi.

The SH field of rldimi is 6-bit wide and it is not contiguous in the instruction.
Bits 0-4 are placed in bit fields 16-20 in the instruction, while bit 5 is
placed in bit field 30. The current implementation does not consider this and,
therefore, any SH field between 32 and 63 are encoded wrongly in the instruciton.

Change-Id: I4d25a0a70f4219569be0e18160dea5505bd7fff0
Reviewed-on: https://go-review.googlesource.com/37350
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com>
src/cmd/internal/obj/ppc64/asm9.go

index e88cd1212671f0e1bc31b3b4f3757ad824435955..771f8e560500dcefd8d6c209bc77399c464fe1f4 100644 (file)
@@ -2721,6 +2721,9 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
                case ARLDIMI, ARLDIMICC:
                        o1 = AOP_RRR(opirr(ctxt, p.As), uint32(p.Reg), uint32(p.To.Reg), (uint32(v) & 0x1F))
                        o1 |= (uint32(d) & 31) << 6
+                       if d&0x20 != 0 {
+                               o1 |= 1 << 5
+                       }
                        if v&0x20 != 0 {
                                o1 |= 1 << 1
                        }