diff options
author | Daniel Sanders <daniel.sanders@imgtec.com> | 2015-10-05 13:19:29 +0000 |
---|---|---|
committer | Daniel Sanders <daniel.sanders@imgtec.com> | 2015-10-05 13:19:29 +0000 |
commit | fbdf2017eab1c9c16faaf80dc31df83820dec2ab (patch) | |
tree | 4ce472624fde1539569027d1a48eaf0c7f209497 /test/MC/Mips/macro-dla.s | |
parent | 9fdd48c18421d9d050740522cfe189e1aebe59d2 (diff) |
[mips] Changed the way symbols are handled in dla and la instructions to allow simple expressions.
Summary:
An instruction like "(d)la $5, symbol+8" previously would have crashed the
assembler as it contains an expression. This is now fixed.
A few tests cases have also been changed to reflect these changes, however
these should only be syntax changes. Some new test cases have also been
added.
Patch by Scott Egerton.
Reviewers: vkalintiris, dsanders
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D12760
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249311 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC/Mips/macro-dla.s')
-rw-r--r-- | test/MC/Mips/macro-dla.s | 71 |
1 files changed, 47 insertions, 24 deletions
diff --git a/test/MC/Mips/macro-dla.s b/test/MC/Mips/macro-dla.s index 9ded7423ff83..e3b558e9e514 100644 --- a/test/MC/Mips/macro-dla.s +++ b/test/MC/Mips/macro-dla.s @@ -634,51 +634,74 @@ symbol: # CHECK-LABEL: symbol: .extern extern_sym .option pic0 dla $5, extern_sym # CHECK: lui $5, %highest(extern_sym) # encoding: [0x3c,0x05,A,A] - # CHECK: # fixup A - offset: 0, value: extern_sym@HIGHEST, kind: fixup_Mips_HIGHEST + # CHECK: # fixup A - offset: 0, value: %highest(extern_sym), kind: fixup_Mips_HIGHEST # CHECK: lui $1, %hi(extern_sym) # encoding: [0x3c,0x01,A,A] - # CHECK: # fixup A - offset: 0, value: extern_sym@ABS_HI, kind: fixup_Mips_HI16 + # CHECK: # fixup A - offset: 0, value: %hi(extern_sym), kind: fixup_Mips_HI16 # CHECK: daddiu $5, $5, %higher(extern_sym) # encoding: [0x64,0xa5,A,A] - # CHECK: # fixup A - offset: 0, value: extern_sym@HIGHER, kind: fixup_Mips_HIGHER + # CHECK: # fixup A - offset: 0, value: %higher(extern_sym), kind: fixup_Mips_HIGHER # CHECK: daddiu $1, $1, %lo(extern_sym) # encoding: [0x64,0x21,A,A] - # CHECK: # fixup A - offset: 0, value: extern_sym@ABS_LO, kind: fixup_Mips_LO16 + # CHECK: # fixup A - offset: 0, value: %lo(extern_sym), kind: fixup_Mips_LO16 # CHECK: dsll32 $5, $5, 0 # encoding: [0x00,0x05,0x28,0x3c] # CHECK: daddu $5, $5, $1 # encoding: [0x00,0xa1,0x28,0x2d] - -# FIXME: Simple symbol expressions crash the assembler. -#dla $5, extern_sym+8 # TODO: lui $5, %highest(extern_sym) # encoding: [0x3c,0x05,A,A] - # TODO: # fixup A - offset: 0, value: extern_sym@HIGHEST, kind: fixup_Mips_HIGHEST - # TODO: lui $1, %hi(extern_sym) # encoding: [0x3c,0x01,A,A] - # TODO: # fixup A - offset: 0, value: extern_sym@ABS_HI, kind: fixup_Mips_HI16 - # TODO: daddiu $5, $5, %higher(extern_sym) # encoding: [0x64,0xa5,A,A] - # TODO: # fixup A - offset: 0, value: extern_sym@HIGHER, kind: fixup_Mips_HIGHER - # TODO: daddiu $1, $1, %lo(extern_sym) # encoding: [0x64,0x21,A,A] - # TODO: # fixup A - offset: 0, value: extern_sym@ABS_LO, kind: fixup_Mips_LO16 - # TODO: dsll32 $5, $5, 0 # encoding: [0x00,0x05,0x28,0x3c] - # TODO: daddu $5, $5, $1 # encoding: [0x00,0xa1,0x28,0x2d] dla $5, extern_sym($8) # CHECK: lui $5, %highest(extern_sym) # encoding: [0x3c,0x05,A,A] - # CHECK: # fixup A - offset: 0, value: extern_sym@HIGHEST, kind: fixup_Mips_HIGHEST + # CHECK: # fixup A - offset: 0, value: %highest(extern_sym), kind: fixup_Mips_HIGHEST # CHECK: lui $1, %hi(extern_sym) # encoding: [0x3c,0x01,A,A] - # CHECK: # fixup A - offset: 0, value: extern_sym@ABS_HI, kind: fixup_Mips_HI16 + # CHECK: # fixup A - offset: 0, value: %hi(extern_sym), kind: fixup_Mips_HI16 # CHECK: daddiu $5, $5, %higher(extern_sym) # encoding: [0x64,0xa5,A,A] - # CHECK: # fixup A - offset: 0, value: extern_sym@HIGHER, kind: fixup_Mips_HIGHER + # CHECK: # fixup A - offset: 0, value: %higher(extern_sym), kind: fixup_Mips_HIGHER # CHECK: daddiu $1, $1, %lo(extern_sym) # encoding: [0x64,0x21,A,A] - # CHECK: # fixup A - offset: 0, value: extern_sym@ABS_LO, kind: fixup_Mips_LO16 + # CHECK: # fixup A - offset: 0, value: %lo(extern_sym), kind: fixup_Mips_LO16 # CHECK: dsll32 $5, $5, 0 # encoding: [0x00,0x05,0x28,0x3c] # CHECK: daddu $5, $5, $1 # encoding: [0x00,0xa1,0x28,0x2d] # CHECK: daddu $5, $5, $8 # encoding: [0x00,0xa8,0x28,0x2d] dla $5, extern_sym($5) # CHECK: lui $1, %highest(extern_sym) # encoding: [0x3c,0x01,A,A] - # CHECK: # fixup A - offset: 0, value: extern_sym@HIGHEST, kind: fixup_Mips_HIGHEST + # CHECK: # fixup A - offset: 0, value: %highest(extern_sym), kind: fixup_Mips_HIGHEST # CHECK: daddiu $1, $1, %higher(extern_sym) # encoding: [0x64,0x21,A,A] - # CHECK: # fixup A - offset: 0, value: extern_sym@HIGHER, kind: fixup_Mips_HIGHER + # CHECK: # fixup A - offset: 0, value: %higher(extern_sym), kind: fixup_Mips_HIGHER # CHECK: dsll $1, $1, 16 # encoding: [0x00,0x01,0x0c,0x38] # CHECK: daddiu $1, $1, %hi(extern_sym) # encoding: [0x64,0x21,A,A] - # CHECK: # fixup A - offset: 0, value: extern_sym@ABS_HI, kind: fixup_Mips_HI16 + # CHECK: # fixup A - offset: 0, value: %hi(extern_sym), kind: fixup_Mips_HI16 # CHECK: dsll $1, $1, 16 # encoding: [0x00,0x01,0x0c,0x38] # CHECK: daddiu $1, $1, %lo(extern_sym) # encoding: [0x64,0x21,A,A] - # CHECK: # fixup A - offset: 0, value: extern_sym@ABS_LO, kind: fixup_Mips_LO16 + # CHECK: # fixup A - offset: 0, value: %lo(extern_sym), kind: fixup_Mips_LO16 # CHECK: daddu $5, $1, $5 # encoding: [0x00,0x25,0x28,0x2d] +dla $5, extern_sym+8 # CHECK: lui $5, %highest(extern_sym+8) # encoding: [0x3c,0x05,A,A] + # CHECK: # fixup A - offset: 0, value: %highest(extern_sym+8), kind: fixup_Mips_HIGHEST + # CHECK: lui $1, %hi(extern_sym+8) # encoding: [0x3c,0x01,A,A] + # CHECK: # fixup A - offset: 0, value: %hi(extern_sym+8), kind: fixup_Mips_HI16 + # CHECK: daddiu $5, $5, %higher(extern_sym+8) # encoding: [0x64,0xa5,A,A] + # CHECK: # fixup A - offset: 0, value: %higher(extern_sym+8), kind: fixup_Mips_HIGHER + # CHECK: daddiu $1, $1, %lo(extern_sym+8) # encoding: [0x64,0x21,A,A] + # CHECK: # fixup A - offset: 0, value: %lo(extern_sym+8), kind: fixup_Mips_LO16 + # CHECK: dsll32 $5, $5, 0 # encoding: [0x00,0x05,0x28,0x3c] + # CHECK: daddu $5, $5, $1 # encoding: [0x00,0xa1,0x28,0x2d] + +dla $5, extern_sym+8($8) # CHECK: lui $5, %highest(extern_sym+8) # encoding: [0x3c,0x05,A,A] + # CHECK: # fixup A - offset: 0, value: %highest(extern_sym+8), kind: fixup_Mips_HIGHEST + # CHECK: lui $1, %hi(extern_sym+8) # encoding: [0x3c,0x01,A,A] + # CHECK: # fixup A - offset: 0, value: %hi(extern_sym+8), kind: fixup_Mips_HI16 + # CHECK: daddiu $5, $5, %higher(extern_sym+8) # encoding: [0x64,0xa5,A,A] + # CHECK: # fixup A - offset: 0, value: %higher(extern_sym+8), kind: fixup_Mips_HIGHER + # CHECK: daddiu $1, $1, %lo(extern_sym+8) # encoding: [0x64,0x21,A,A] + # CHECK: # fixup A - offset: 0, value: %lo(extern_sym+8), kind: fixup_Mips_LO16 + # CHECK: dsll32 $5, $5, 0 # encoding: [0x00,0x05,0x28,0x3c] + # CHECK: daddu $5, $5, $1 # encoding: [0x00,0xa1,0x28,0x2d] + # CHECK: daddu $5, $5, $8 # encoding: [0x00,0xa8,0x28,0x2d] + +dla $5, extern_sym+8($5) # CHECK: lui $1, %highest(extern_sym+8) # encoding: [0x3c,0x01,A,A] + # CHECK: # fixup A - offset: 0, value: %highest(extern_sym+8), kind: fixup_Mips_HIGHEST + # CHECK: daddiu $1, $1, %higher(extern_sym+8) # encoding: [0x64,0x21,A,A] + # CHECK: # fixup A - offset: 0, value: %higher(extern_sym+8), kind: fixup_Mips_HIGHER + # CHECK: dsll $1, $1, 16 # encoding: [0x00,0x01,0x0c,0x38] + # CHECK: daddiu $1, $1, %hi(extern_sym+8) # encoding: [0x64,0x21,A,A] + # CHECK: # fixup A - offset: 0, value: %hi(extern_sym+8), kind: fixup_Mips_HI16 + # CHECK: dsll $1, $1, 16 # encoding: [0x00,0x01,0x0c,0x38] + # CHECK: daddiu $1, $1, %lo(extern_sym+8) # encoding: [0x64,0x21,A,A] + # CHECK: # fixup A - offset: 0, value: %lo(extern_sym+8), kind: fixup_Mips_LO16 + # CHECK: daddu $5, $1, $5 # encoding: [0x00,0x25,0x28,0x2d] + .option pic2 #dla $5, symbol |