1019 __ vmovdqu(xmm0, Address(rsp, src_offset)); |
1019 __ vmovdqu(xmm0, Address(rsp, src_offset)); |
1020 __ vmovdqu(Address(rsp, dst_offset), xmm0); |
1020 __ vmovdqu(Address(rsp, dst_offset), xmm0); |
1021 __ vmovdqu(xmm0, Address(rsp, -32)); |
1021 __ vmovdqu(xmm0, Address(rsp, -32)); |
1022 break; |
1022 break; |
1023 case Op_VecZ: |
1023 case Op_VecZ: |
1024 __ evmovdqul(Address(rsp, -64), xmm0, 2); |
1024 __ evmovdquq(Address(rsp, -64), xmm0, 2); |
1025 __ evmovdqul(xmm0, Address(rsp, src_offset), 2); |
1025 __ evmovdquq(xmm0, Address(rsp, src_offset), 2); |
1026 __ evmovdqul(Address(rsp, dst_offset), xmm0, 2); |
1026 __ evmovdquq(Address(rsp, dst_offset), xmm0, 2); |
1027 __ evmovdqul(xmm0, Address(rsp, -64), 2); |
1027 __ evmovdquq(xmm0, Address(rsp, -64), 2); |
1028 break; |
1028 break; |
1029 default: |
1029 default: |
1030 ShouldNotReachHere(); |
1030 ShouldNotReachHere(); |
1031 } |
1031 } |
1032 int size = __ offset() - offset; |
1032 int size = __ offset() - offset; |
12045 ins_pipe( pipe_jcc ); |
12045 ins_pipe( pipe_jcc ); |
12046 %} |
12046 %} |
12047 |
12047 |
12048 // Jump Direct Conditional - Label defines a relative address from Jcc+1 |
12048 // Jump Direct Conditional - Label defines a relative address from Jcc+1 |
12049 instruct jmpLoopEnd(cmpOp cop, eFlagsReg cr, label labl) %{ |
12049 instruct jmpLoopEnd(cmpOp cop, eFlagsReg cr, label labl) %{ |
|
12050 predicate(!n->has_vector_mask_set()); |
12050 match(CountedLoopEnd cop cr); |
12051 match(CountedLoopEnd cop cr); |
12051 effect(USE labl); |
12052 effect(USE labl); |
12052 |
12053 |
12053 ins_cost(300); |
12054 ins_cost(300); |
12054 format %{ "J$cop $labl\t# Loop end" %} |
12055 format %{ "J$cop $labl\t# Loop end" %} |
12060 ins_pipe( pipe_jcc ); |
12061 ins_pipe( pipe_jcc ); |
12061 %} |
12062 %} |
12062 |
12063 |
12063 // Jump Direct Conditional - Label defines a relative address from Jcc+1 |
12064 // Jump Direct Conditional - Label defines a relative address from Jcc+1 |
12064 instruct jmpLoopEndU(cmpOpU cop, eFlagsRegU cmp, label labl) %{ |
12065 instruct jmpLoopEndU(cmpOpU cop, eFlagsRegU cmp, label labl) %{ |
|
12066 predicate(!n->has_vector_mask_set()); |
12065 match(CountedLoopEnd cop cmp); |
12067 match(CountedLoopEnd cop cmp); |
12066 effect(USE labl); |
12068 effect(USE labl); |
12067 |
12069 |
12068 ins_cost(300); |
12070 ins_cost(300); |
12069 format %{ "J$cop,u $labl\t# Loop end" %} |
12071 format %{ "J$cop,u $labl\t# Loop end" %} |
12074 %} |
12076 %} |
12075 ins_pipe( pipe_jcc ); |
12077 ins_pipe( pipe_jcc ); |
12076 %} |
12078 %} |
12077 |
12079 |
12078 instruct jmpLoopEndUCF(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{ |
12080 instruct jmpLoopEndUCF(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{ |
|
12081 predicate(!n->has_vector_mask_set()); |
12079 match(CountedLoopEnd cop cmp); |
12082 match(CountedLoopEnd cop cmp); |
12080 effect(USE labl); |
12083 effect(USE labl); |
12081 |
12084 |
12082 ins_cost(200); |
12085 ins_cost(200); |
12083 format %{ "J$cop,u $labl\t# Loop end" %} |
12086 format %{ "J$cop,u $labl\t# Loop end" %} |
12084 size(6); |
12087 size(6); |
12085 ins_encode %{ |
12088 ins_encode %{ |
12086 Label* L = $labl$$label; |
12089 Label* L = $labl$$label; |
12087 __ jcc((Assembler::Condition)($cop$$cmpcode), *L, false); // Always long jump |
12090 __ jcc((Assembler::Condition)($cop$$cmpcode), *L, false); // Always long jump |
|
12091 %} |
|
12092 ins_pipe( pipe_jcc ); |
|
12093 %} |
|
12094 |
|
12095 // mask version |
|
12096 // Jump Direct Conditional - Label defines a relative address from Jcc+1 |
|
12097 instruct jmpLoopEnd_and_restoreMask(cmpOp cop, eFlagsReg cr, label labl) %{ |
|
12098 predicate(n->has_vector_mask_set()); |
|
12099 match(CountedLoopEnd cop cr); |
|
12100 effect(USE labl); |
|
12101 |
|
12102 ins_cost(400); |
|
12103 format %{ "J$cop $labl\t# Loop end\n\t" |
|
12104 "restorevectmask \t# vector mask restore for loops" %} |
|
12105 size(10); |
|
12106 ins_encode %{ |
|
12107 Label* L = $labl$$label; |
|
12108 __ jcc((Assembler::Condition)($cop$$cmpcode), *L, false); // Always long jump |
|
12109 __ restorevectmask(); |
|
12110 %} |
|
12111 ins_pipe( pipe_jcc ); |
|
12112 %} |
|
12113 |
|
12114 // Jump Direct Conditional - Label defines a relative address from Jcc+1 |
|
12115 instruct jmpLoopEndU_and_restoreMask(cmpOpU cop, eFlagsRegU cmp, label labl) %{ |
|
12116 predicate(n->has_vector_mask_set()); |
|
12117 match(CountedLoopEnd cop cmp); |
|
12118 effect(USE labl); |
|
12119 |
|
12120 ins_cost(400); |
|
12121 format %{ "J$cop,u $labl\t# Loop end\n\t" |
|
12122 "restorevectmask \t# vector mask restore for loops" %} |
|
12123 size(10); |
|
12124 ins_encode %{ |
|
12125 Label* L = $labl$$label; |
|
12126 __ jcc((Assembler::Condition)($cop$$cmpcode), *L, false); // Always long jump |
|
12127 __ restorevectmask(); |
|
12128 %} |
|
12129 ins_pipe( pipe_jcc ); |
|
12130 %} |
|
12131 |
|
12132 instruct jmpLoopEndUCF_and_restoreMask(cmpOpUCF cop, eFlagsRegUCF cmp, label labl) %{ |
|
12133 predicate(n->has_vector_mask_set()); |
|
12134 match(CountedLoopEnd cop cmp); |
|
12135 effect(USE labl); |
|
12136 |
|
12137 ins_cost(300); |
|
12138 format %{ "J$cop,u $labl\t# Loop end\n\t" |
|
12139 "restorevectmask \t# vector mask restore for loops" %} |
|
12140 size(10); |
|
12141 ins_encode %{ |
|
12142 Label* L = $labl$$label; |
|
12143 __ jcc((Assembler::Condition)($cop$$cmpcode), *L, false); // Always long jump |
|
12144 __ restorevectmask(); |
12088 %} |
12145 %} |
12089 ins_pipe( pipe_jcc ); |
12146 ins_pipe( pipe_jcc ); |
12090 %} |
12147 %} |
12091 |
12148 |
12092 // Jump Direct Conditional - using unsigned comparison |
12149 // Jump Direct Conditional - using unsigned comparison |