This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
These two, other than VQSHLU, didn't have their immediates properly range checked so far. gas/ 2013-04-10 Jan Beulich <jbeulich@suse.com> * gas/config/tc-arm.c (do_neon_shl_imm): Check immediate range. (do_neon_qshl_imm): Likewise. gas/testsuite/ 2013-04-10 Jan Beulich <jbeulich@suse.com> * gas/arm/neon-addressing-bad.s: Add test for invalid VSHL, VQSHL, and VQSHLU immediates. * gas/arm/neon-addressing-bad.l: Update accordingly. --- 2013-04-10/gas/config/tc-arm.c +++ 2013-04-10/gas/config/tc-arm.c @@ -13537,8 +13537,12 @@ do_neon_shl_imm (void) { enum neon_shape rs = neon_select_shape (NS_DDI, NS_QQI, NS_NULL); struct neon_type_el et = neon_check_type (2, rs, N_EQK, N_KEY | N_I_ALL); + int imm = inst.operands[2].imm; + + constraint (imm < 0 || (unsigned)imm >= et.size, + _("immediate out of range for shift")); NEON_ENCODE (IMMED, inst); - neon_imm_shift (FALSE, 0, neon_quad (rs), et, inst.operands[2].imm); + neon_imm_shift (FALSE, 0, neon_quad (rs), et, imm); } else { @@ -13569,10 +13573,12 @@ do_neon_qshl_imm (void) { enum neon_shape rs = neon_select_shape (NS_DDI, NS_QQI, NS_NULL); struct neon_type_el et = neon_check_type (2, rs, N_EQK, N_SU_ALL | N_KEY); + int imm = inst.operands[2].imm; + constraint (imm < 0 || (unsigned)imm >= et.size, + _("immediate out of range for shift")); NEON_ENCODE (IMMED, inst); - neon_imm_shift (TRUE, et.type == NT_unsigned, neon_quad (rs), et, - inst.operands[2].imm); + neon_imm_shift (TRUE, et.type == NT_unsigned, neon_quad (rs), et, imm); } else { --- 2013-04-10/gas/testsuite/gas/arm/neon-addressing-bad.l +++ 2013-04-10/gas/testsuite/gas/arm/neon-addressing-bad.l @@ -21,3 +21,15 @@ [^:]*:25: Error: r15 not allowed here -- `vst1.8 {Q1},R0' [^:]*:26: Error: r15 not allowed here -- `vst1.8 {D0},\[PC\]' [^:]*:27: Error: r15 not allowed here -- `vst1.8 {D0},\[PC,#0\]' +[^:]*:30: Error: immediate out of range for shift -- `vshl.i8 d0,d0,#8' +[^:]*:32: Error: immediate out of range for shift -- `vshl.i16 d0,d0,#16' +[^:]*:34: Error: immediate out of range for shift -- `vshl.i32 d0,d0,#32' +[^:]*:36: Error: .* -- `vshl.i64 d0,d0,#64' +[^:]*:39: Error: immediate out of range for shift -- `vqshl.s8 d0,d0,#8' +[^:]*:41: Error: immediate out of range for shift -- `vqshl.s16 d0,d0,#16' +[^:]*:43: Error: immediate out of range for shift -- `vqshl.s32 d0,d0,#32' +[^:]*:45: Error: .* -- `vqshl.s64 d0,d0,#64' +[^:]*:48: Error: immediate out of range for shift -- `vqshlu.s8 d0,d0,#8' +[^:]*:50: Error: immediate out of range for shift -- `vqshlu.s16 d0,d0,#16' +[^:]*:52: Error: immediate out of range for shift -- `vqshlu.s32 d0,d0,#32' +[^:]*:54: Error: .* -- `vqshlu.s64 d0,d0,#64' --- 2013-04-10/gas/testsuite/gas/arm/neon-addressing-bad.s +++ 2013-04-10/gas/testsuite/gas/arm/neon-addressing-bad.s @@ -25,3 +25,30 @@ VST1.8 {D0}, R0 VST1.8 {Q1}, R0 VST1.8 {D0}, [PC] VST1.8 {D0}, [PC, #0] + +VSHL.I8 d0, d0, #7 +VSHL.I8 d0, d0, #8 +VSHL.I16 d0, d0, #15 +VSHL.I16 d0, d0, #16 +VSHL.I32 d0, d0, #31 +VSHL.I32 d0, d0, #32 +VSHL.I64 d0, d0, #63 +VSHL.I64 d0, d0, #64 + +VQSHL.S8 d0, d0, #7 +VQSHL.S8 d0, d0, #8 +VQSHL.S16 d0, d0, #15 +VQSHL.S16 d0, d0, #16 +VQSHL.S32 d0, d0, #31 +VQSHL.S32 d0, d0, #32 +VQSHL.S64 d0, d0, #63 +VQSHL.S64 d0, d0, #64 + +VQSHLU.S8 d0, d0, #7 +VQSHLU.S8 d0, d0, #8 +VQSHLU.S16 d0, d0, #15 +VQSHLU.S16 d0, d0, #16 +VQSHLU.S32 d0, d0, #31 +VQSHLU.S32 d0, d0, #32 +VQSHLU.S64 d0, d0, #63 +VQSHLU.S64 d0, d0, #64
Attachment:
binutils-mainline-arm-vshl-immed.patch
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |