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
The situation seems to be better in gas 2.21 (binutils- arm-linux- gnueabi 2.21-1ubuntu4cr oss1.55)
arm-linux- gnueabi- as vldr-dis.s -mfpu=neon -(.&-4) -4+float] ' -(.&-4) -4+float] '
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,
vldr-dis.s:23: Error: r15 not allowed here -- `vld1.8 d0,[pc,
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