src/cpu/x86/vm/x86_64.ad
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
7079329 Cdiff src/cpu/x86/vm/x86_64.ad
src/cpu/x86/vm/x86_64.ad
Print this page
*** 6615,6703 ****
predicate(ReadPrefetchInstr==3);
match(PrefetchRead mem);
ins_cost(125);
format %{ "PREFETCHR $mem\t# Prefetch into level 1 cache" %}
! opcode(0x0F, 0x0D); /* Opcode 0F 0D /0 */
! ins_encode(REX_mem(mem), OpcP, OpcS, RM_opc_mem(0x00, mem));
ins_pipe(ialu_mem);
%}
instruct prefetchrNTA( memory mem ) %{
predicate(ReadPrefetchInstr==0);
match(PrefetchRead mem);
ins_cost(125);
format %{ "PREFETCHNTA $mem\t# Prefetch into non-temporal cache for read" %}
! opcode(0x0F, 0x18); /* Opcode 0F 18 /0 */
! ins_encode(REX_mem(mem), OpcP, OpcS, RM_opc_mem(0x00, mem));
ins_pipe(ialu_mem);
%}
instruct prefetchrT0( memory mem ) %{
predicate(ReadPrefetchInstr==1);
match(PrefetchRead mem);
ins_cost(125);
format %{ "PREFETCHT0 $mem\t# prefetch into L1 and L2 caches for read" %}
! opcode(0x0F, 0x18); /* Opcode 0F 18 /1 */
! ins_encode(REX_mem(mem), OpcP, OpcS, RM_opc_mem(0x01, mem));
ins_pipe(ialu_mem);
%}
instruct prefetchrT2( memory mem ) %{
predicate(ReadPrefetchInstr==2);
match(PrefetchRead mem);
ins_cost(125);
format %{ "PREFETCHT2 $mem\t# prefetch into L2 caches for read" %}
! opcode(0x0F, 0x18); /* Opcode 0F 18 /3 */
! ins_encode(REX_mem(mem), OpcP, OpcS, RM_opc_mem(0x03, mem));
ins_pipe(ialu_mem);
%}
! instruct prefetchw( memory mem ) %{
! predicate(AllocatePrefetchInstr==3);
match(PrefetchWrite mem);
ins_cost(125);
! format %{ "PREFETCHW $mem\t# Prefetch into level 1 cache and mark modified" %}
! opcode(0x0F, 0x0D); /* Opcode 0F 0D /1 */
! ins_encode(REX_mem(mem), OpcP, OpcS, RM_opc_mem(0x01, mem));
ins_pipe(ialu_mem);
%}
! instruct prefetchwNTA( memory mem ) %{
predicate(AllocatePrefetchInstr==0);
! match(PrefetchWrite mem);
ins_cost(125);
! format %{ "PREFETCHNTA $mem\t# Prefetch to non-temporal cache for write" %}
! opcode(0x0F, 0x18); /* Opcode 0F 18 /0 */
! ins_encode(REX_mem(mem), OpcP, OpcS, RM_opc_mem(0x00, mem));
ins_pipe(ialu_mem);
%}
! instruct prefetchwT0( memory mem ) %{
predicate(AllocatePrefetchInstr==1);
! match(PrefetchWrite mem);
ins_cost(125);
! format %{ "PREFETCHT0 $mem\t# Prefetch to level 1 and 2 caches for write" %}
! opcode(0x0F, 0x18); /* Opcode 0F 18 /1 */
! ins_encode(REX_mem(mem), OpcP, OpcS, RM_opc_mem(0x01, mem));
ins_pipe(ialu_mem);
%}
! instruct prefetchwT2( memory mem ) %{
predicate(AllocatePrefetchInstr==2);
! match(PrefetchWrite mem);
ins_cost(125);
! format %{ "PREFETCHT2 $mem\t# Prefetch to level 2 cache for write" %}
! opcode(0x0F, 0x18); /* Opcode 0F 18 /3 */
! ins_encode(REX_mem(mem), OpcP, OpcS, RM_opc_mem(0x03, mem));
ins_pipe(ialu_mem);
%}
//----------Store Instructions-------------------------------------------------
--- 6615,6724 ----
predicate(ReadPrefetchInstr==3);
match(PrefetchRead mem);
ins_cost(125);
format %{ "PREFETCHR $mem\t# Prefetch into level 1 cache" %}
! ins_encode %{
! __ prefetchr($mem$$Address);
! %}
ins_pipe(ialu_mem);
%}
instruct prefetchrNTA( memory mem ) %{
predicate(ReadPrefetchInstr==0);
match(PrefetchRead mem);
ins_cost(125);
format %{ "PREFETCHNTA $mem\t# Prefetch into non-temporal cache for read" %}
! ins_encode %{
! __ prefetchnta($mem$$Address);
! %}
ins_pipe(ialu_mem);
%}
instruct prefetchrT0( memory mem ) %{
predicate(ReadPrefetchInstr==1);
match(PrefetchRead mem);
ins_cost(125);
format %{ "PREFETCHT0 $mem\t# prefetch into L1 and L2 caches for read" %}
! ins_encode %{
! __ prefetcht0($mem$$Address);
! %}
ins_pipe(ialu_mem);
%}
instruct prefetchrT2( memory mem ) %{
predicate(ReadPrefetchInstr==2);
match(PrefetchRead mem);
ins_cost(125);
format %{ "PREFETCHT2 $mem\t# prefetch into L2 caches for read" %}
! ins_encode %{
! __ prefetcht2($mem$$Address);
! %}
ins_pipe(ialu_mem);
%}
! instruct prefetchwNTA( memory mem ) %{
match(PrefetchWrite mem);
ins_cost(125);
! format %{ "PREFETCHNTA $mem\t# Prefetch to non-temporal cache for write" %}
! ins_encode %{
! __ prefetchnta($mem$$Address);
! %}
ins_pipe(ialu_mem);
%}
! // Prefetch instructions for allocation.
!
! instruct prefetchAlloc( memory mem ) %{
! predicate(AllocatePrefetchInstr==3);
! match(PrefetchAllocation mem);
! ins_cost(125);
!
! format %{ "PREFETCHW $mem\t# Prefetch allocation into level 1 cache and mark modified" %}
! ins_encode %{
! __ prefetchw($mem$$Address);
! %}
! ins_pipe(ialu_mem);
! %}
!
! instruct prefetchAllocNTA( memory mem ) %{
predicate(AllocatePrefetchInstr==0);
! match(PrefetchAllocation mem);
ins_cost(125);
! format %{ "PREFETCHNTA $mem\t# Prefetch allocation to non-temporal cache for write" %}
! ins_encode %{
! __ prefetchnta($mem$$Address);
! %}
ins_pipe(ialu_mem);
%}
! instruct prefetchAllocT0( memory mem ) %{
predicate(AllocatePrefetchInstr==1);
! match(PrefetchAllocation mem);
ins_cost(125);
! format %{ "PREFETCHT0 $mem\t# Prefetch allocation to level 1 and 2 caches for write" %}
! ins_encode %{
! __ prefetcht0($mem$$Address);
! %}
ins_pipe(ialu_mem);
%}
! instruct prefetchAllocT2( memory mem ) %{
predicate(AllocatePrefetchInstr==2);
! match(PrefetchAllocation mem);
ins_cost(125);
! format %{ "PREFETCHT2 $mem\t# Prefetch allocation to level 2 cache for write" %}
! ins_encode %{
! __ prefetcht2($mem$$Address);
! %}
ins_pipe(ialu_mem);
%}
//----------Store Instructions-------------------------------------------------
src/cpu/x86/vm/x86_64.ad
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File