Skip to content

Commit 41f2ea0

Browse files
authored
[SPARC][IAS] Add support for prefetcha instruction
This adds support for `prefetcha` instruction for prefetching from alternate address spaces. Reviewers: jrtc27, brad0, rorth, s-barannikov Reviewed By: s-barannikov Pull Request: #94250
1 parent 2388129 commit 41f2ea0

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

llvm/lib/Target/Sparc/SparcInstrInfo.td

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1782,6 +1782,13 @@ let Predicates = [HasV9] in {
17821782
def PREFETCHi : F3_2<3, 0b101101,
17831783
(outs), (ins (MEMri $rs1, $simm13):$addr, PrefetchTag:$rd),
17841784
"prefetch [$addr], $rd", []>;
1785+
def PREFETCHAr : F3_1_asi<3, 0b111101, (outs),
1786+
(ins (MEMrr $rs1, $rs2):$addr, ASITag:$asi, PrefetchTag:$rd),
1787+
"prefetcha [$addr] $asi, $rd", []>;
1788+
let Uses = [ASR3] in
1789+
def PREFETCHAi : F3_2<3, 0b111101, (outs),
1790+
(ins (MEMri $rs1, $simm13):$addr, PrefetchTag:$rd),
1791+
"prefetcha [$addr] %asi, $rd", []>;
17851792
}
17861793

17871794

llvm/test/MC/Disassembler/Sparc/sparc-v9-asi.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,8 @@
3232
0xd5 0xf6 0x11 0x56
3333
# V9: casxa [%i0] #ASI_SNF_L, %l6, %o2
3434
0xd5 0xf6 0x11 0x76
35+
36+
# V9: prefetcha [%i1+3968] %asi, #one_read
37+
0xc3 0xee 0x6f 0x80
38+
# V9: prefetcha [%i1+%i2] #ASI_SNF, #one_read
39+
0xc3 0xee 0x50 0x7a

llvm/test/MC/Sparc/sparcv9-instructions.s

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,36 @@
647647
! V9: prefetch [%i1+%i2], #one_write_strong ! encoding: [0xef,0x6e,0x40,0x1a]
648648
prefetch [ %i1 + %i2 ], #one_write_strong
649649

650+
! V8: error: malformed ASI tag, must be a constant integer expression
651+
! V8-NEXT: prefetcha [ %i1 + 0xf80 ] %asi, 1
652+
! V9: prefetcha [%i1+3968] %asi, #one_read ! encoding: [0xc3,0xee,0x6f,0x80]
653+
prefetcha [ %i1 + 0xf80 ] %asi, 1
654+
655+
! V8: error: malformed ASI tag, must be a constant integer expression
656+
! V8-NEXT: prefetcha [ %i1 + 0xf80 ] %asi, #one_read
657+
! V9: prefetcha [%i1+3968] %asi, #one_read ! encoding: [0xc3,0xee,0x6f,0x80]
658+
prefetcha [ %i1 + 0xf80 ] %asi, #one_read
659+
660+
! V8: error: malformed ASI tag, must be a constant integer expression
661+
! V8-NEXT: prefetcha [ %i1 + %i2 ] #ASI_SNF, 1
662+
! V9: prefetcha [%i1+%i2] #ASI_SNF, #one_read ! encoding: [0xc3,0xee,0x50,0x7a]
663+
prefetcha [ %i1 + %i2 ] #ASI_SNF, 1
664+
665+
! V8: error: malformed ASI tag, must be a constant integer expression
666+
! V8-NEXT: prefetcha [ %i1 + %i2 ] #ASI_SNF, #one_read
667+
! V9: prefetcha [%i1+%i2] #ASI_SNF, #one_read ! encoding: [0xc3,0xee,0x50,0x7a]
668+
prefetcha [ %i1 + %i2 ] #ASI_SNF, #one_read
669+
670+
! V8: error: invalid operand for instruction
671+
! V8-NEXT: prefetcha [ %i1 + %i2 ] 131, 1
672+
! V9: prefetcha [%i1+%i2] #ASI_SNF, #one_read ! encoding: [0xc3,0xee,0x50,0x7a]
673+
prefetcha [ %i1 + %i2 ] 131, 1
674+
675+
! V8: error: unexpected token
676+
! V8-NEXT: prefetcha [ %i1 + %i2 ] 131, #one_read
677+
! V9: prefetcha [%i1+%i2] #ASI_SNF, #one_read ! encoding: [0xc3,0xee,0x50,0x7a]
678+
prefetcha [ %i1 + %i2 ] 131, #one_read
679+
650680
! V8: error: instruction requires a CPU feature not currently enabled
651681
! V8-NEXT: done
652682
! V9: done ! encoding: [0x81,0xf0,0x00,0x00]

0 commit comments

Comments
 (0)