[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: https://github.com/llvm/llvm-project/pull/94250
This commit is contained in:
Koakuma
2024-06-09 22:13:31 +07:00
committed by GitHub
parent 2388129d48
commit 41f2ea0b0f
3 changed files with 42 additions and 0 deletions

View File

@@ -1782,6 +1782,13 @@ let Predicates = [HasV9] in {
def PREFETCHi : F3_2<3, 0b101101,
(outs), (ins (MEMri $rs1, $simm13):$addr, PrefetchTag:$rd),
"prefetch [$addr], $rd", []>;
def PREFETCHAr : F3_1_asi<3, 0b111101, (outs),
(ins (MEMrr $rs1, $rs2):$addr, ASITag:$asi, PrefetchTag:$rd),
"prefetcha [$addr] $asi, $rd", []>;
let Uses = [ASR3] in
def PREFETCHAi : F3_2<3, 0b111101, (outs),
(ins (MEMri $rs1, $simm13):$addr, PrefetchTag:$rd),
"prefetcha [$addr] %asi, $rd", []>;
}

View File

@@ -32,3 +32,8 @@
0xd5 0xf6 0x11 0x56
# V9: casxa [%i0] #ASI_SNF_L, %l6, %o2
0xd5 0xf6 0x11 0x76
# V9: prefetcha [%i1+3968] %asi, #one_read
0xc3 0xee 0x6f 0x80
# V9: prefetcha [%i1+%i2] #ASI_SNF, #one_read
0xc3 0xee 0x50 0x7a

View File

@@ -647,6 +647,36 @@
! V9: prefetch [%i1+%i2], #one_write_strong ! encoding: [0xef,0x6e,0x40,0x1a]
prefetch [ %i1 + %i2 ], #one_write_strong
! V8: error: malformed ASI tag, must be a constant integer expression
! V8-NEXT: prefetcha [ %i1 + 0xf80 ] %asi, 1
! V9: prefetcha [%i1+3968] %asi, #one_read ! encoding: [0xc3,0xee,0x6f,0x80]
prefetcha [ %i1 + 0xf80 ] %asi, 1
! V8: error: malformed ASI tag, must be a constant integer expression
! V8-NEXT: prefetcha [ %i1 + 0xf80 ] %asi, #one_read
! V9: prefetcha [%i1+3968] %asi, #one_read ! encoding: [0xc3,0xee,0x6f,0x80]
prefetcha [ %i1 + 0xf80 ] %asi, #one_read
! V8: error: malformed ASI tag, must be a constant integer expression
! V8-NEXT: prefetcha [ %i1 + %i2 ] #ASI_SNF, 1
! V9: prefetcha [%i1+%i2] #ASI_SNF, #one_read ! encoding: [0xc3,0xee,0x50,0x7a]
prefetcha [ %i1 + %i2 ] #ASI_SNF, 1
! V8: error: malformed ASI tag, must be a constant integer expression
! V8-NEXT: prefetcha [ %i1 + %i2 ] #ASI_SNF, #one_read
! V9: prefetcha [%i1+%i2] #ASI_SNF, #one_read ! encoding: [0xc3,0xee,0x50,0x7a]
prefetcha [ %i1 + %i2 ] #ASI_SNF, #one_read
! V8: error: invalid operand for instruction
! V8-NEXT: prefetcha [ %i1 + %i2 ] 131, 1
! V9: prefetcha [%i1+%i2] #ASI_SNF, #one_read ! encoding: [0xc3,0xee,0x50,0x7a]
prefetcha [ %i1 + %i2 ] 131, 1
! V8: error: unexpected token
! V8-NEXT: prefetcha [ %i1 + %i2 ] 131, #one_read
! V9: prefetcha [%i1+%i2] #ASI_SNF, #one_read ! encoding: [0xc3,0xee,0x50,0x7a]
prefetcha [ %i1 + %i2 ] 131, #one_read
! V8: error: instruction requires a CPU feature not currently enabled
! V8-NEXT: done
! V9: done ! encoding: [0x81,0xf0,0x00,0x00]