Comment 2 for bug 517081

Revision history for this message
Dr. David Alan Gilbert (davidgil-uk) wrote :

The situation seems to be better in gas 2.21 (binutils-arm-linux-gnueabi 2.21-1ubuntu4cross1.55)

arm-linux-gnueabi-as vldr-dis.s -mfpu=neon
vldr-dis.s: Assembler messages:
vldr-dis.s:17: Error: r15 not allowed here -- `vld1.8 d0,float'
vldr-dis.s:19: Error: r15 not allowed here -- `vst1.8 d0,float'
vldr-dis.s:21: Error: r15 not allowed here -- `vld1.8 d0,[pc,-(.&-4)-4+float]'
vldr-dis.s:23: Error: r15 not allowed here -- `vld1.8 d0,[pc,-(.&-4)-4+float]'

so then I replaced those four with vldr d0, float (to keep offsets the same as the original), reassembled and objdump'd it

which gives:

 0: ed9f 0b0e vldr d0, [pc, #56] ; 3c <float>
   4: 46c0 nop ; (mov r8, r8)
   6: ed9f 0b0d vldr d0, [pc, #52] ; 3c <float>
   a: 46c0 nop ; (mov r8, r8)
   c: ed8f 0b0b vstr d0, [pc, #44] ; 3c <float>
  10: 46c0 nop ; (mov r8, r8)
  12: ed8f 0b0a vstr d0, [pc, #40] ; 3c <float>
  16: 46c0 nop ; (mov r8, r8)
  18: f8df 0020 ldr.w r0, [pc, #32] ; 3c <float>
  1c: 46c0 nop ; (mov r8, r8)
  1e: f8df 001c ldr.w r0, [pc, #28] ; 3c <float>
  22: 46c0 nop ; (mov r8, r8)
  24: ed9f 0b05 vldr d0, [pc, #20] ; 3c <float>
  28: 46c0 nop ; (mov r8, r8)
  2a: ed9f 0b04 vldr d0, [pc, #16] ; 3c <float>
  2e: 46c0 nop ; (mov r8, r8)
  30: ed9f 0b02 vldr d0, [pc, #8] ; 3c <float>
  34: 46c0 nop ; (mov r8, r8)
  36: ed9f 0b01 vldr d0, [pc, #4] ; 3c <float>
  3a: 46c0 nop ; (mov r8, r8)

so I think the offsets are now as you expect.

So I think that the only one left is that it should be disallowing pc relative vstr's

Dave