< prev index next >

src/hotspot/cpu/x86/x86.ad

Print this page




3136     int vector_len = 2;
3137     __ evmovdqul($mem$$Address, $src$$XMMRegister, vector_len);
3138   %}
3139   ins_pipe( pipe_slow );
3140 %}
3141 
3142 instruct storeV64_qword(memory mem, vecZ src) %{
3143   predicate(n->as_StoreVector()->memory_size() == 64 && n->as_StoreVector()->element_size() > 4);
3144   match(Set mem (StoreVector mem src));
3145   ins_cost(145);
3146   format %{ "vmovdquq $mem k0,$src\t! store vector (64 bytes)" %}
3147   ins_encode %{
3148     int vector_len = 2;
3149     __ evmovdquq($mem$$Address, $src$$XMMRegister, vector_len);
3150   %}
3151   ins_pipe( pipe_slow );
3152 %}
3153 
3154 // ====================LEGACY REPLICATE=======================================
3155 
3156 instruct Repl4B_mem(vecS dst, memory mem) %{
3157   predicate(n->as_Vector()->length() == 4 && UseAVX > 0 && !VM_Version::supports_avx512vlbw());
3158   match(Set dst (ReplicateB (LoadB mem)));
3159   format %{ "punpcklbw $dst,$mem\n\t"
3160             "pshuflw $dst,$dst,0x00\t! replicate4B" %}
3161   ins_encode %{
3162     __ punpcklbw($dst$$XMMRegister, $mem$$Address);
3163     __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00);
3164   %}
3165   ins_pipe( pipe_slow );
3166 %}
3167 
3168 instruct Repl8B_mem(vecD dst, memory mem) %{
3169   predicate(n->as_Vector()->length() == 8 && UseAVX > 0 && !VM_Version::supports_avx512vlbw());
3170   match(Set dst (ReplicateB (LoadB mem)));
3171   format %{ "punpcklbw $dst,$mem\n\t"
3172             "pshuflw $dst,$dst,0x00\t! replicate8B" %}
3173   ins_encode %{
3174     __ punpcklbw($dst$$XMMRegister, $mem$$Address);
3175     __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00);
3176   %}
3177   ins_pipe( pipe_slow );
3178 %}
3179 
3180 instruct Repl16B(vecX dst, rRegI src) %{
3181   predicate(n->as_Vector()->length() == 16 && !VM_Version::supports_avx512vlbw());
3182   match(Set dst (ReplicateB src));
3183   format %{ "movd    $dst,$src\n\t"
3184             "punpcklbw $dst,$dst\n\t"
3185             "pshuflw $dst,$dst,0x00\n\t"
3186             "punpcklqdq $dst,$dst\t! replicate16B" %}
3187   ins_encode %{
3188     __ movdl($dst$$XMMRegister, $src$$Register);
3189     __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister);
3190     __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00);
3191     __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister);
3192   %}
3193   ins_pipe( pipe_slow );
3194 %}
3195 
3196 instruct Repl16B_mem(vecX dst, memory mem) %{
3197   predicate(n->as_Vector()->length() == 16 && UseAVX > 0 && !VM_Version::supports_avx512vlbw());
3198   match(Set dst (ReplicateB (LoadB mem)));
3199   format %{ "punpcklbw $dst,$mem\n\t"
3200             "pshuflw $dst,$dst,0x00\n\t"
3201             "punpcklqdq $dst,$dst\t! replicate16B" %}
3202   ins_encode %{
3203     __ punpcklbw($dst$$XMMRegister, $mem$$Address);
3204     __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00);
3205     __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister);
3206   %}
3207   ins_pipe( pipe_slow );
3208 %}
3209 
3210 instruct Repl32B(vecY dst, rRegI src) %{
3211   predicate(n->as_Vector()->length() == 32 && !VM_Version::supports_avx512vlbw());
3212   match(Set dst (ReplicateB src));
3213   format %{ "movd    $dst,$src\n\t"
3214             "punpcklbw $dst,$dst\n\t"
3215             "pshuflw $dst,$dst,0x00\n\t"
3216             "punpcklqdq $dst,$dst\n\t"
3217             "vinserti128_high $dst,$dst\t! replicate32B" %}
3218   ins_encode %{
3219     __ movdl($dst$$XMMRegister, $src$$Register);
3220     __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister);
3221     __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00);
3222     __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister);
3223     __ vinserti128_high($dst$$XMMRegister, $dst$$XMMRegister);
3224   %}
3225   ins_pipe( pipe_slow );
3226 %}
3227 
3228 instruct Repl32B_mem(vecY dst, memory mem) %{
3229   predicate(n->as_Vector()->length() == 32 && !VM_Version::supports_avx512vlbw());
3230   match(Set dst (ReplicateB (LoadB mem)));
3231   format %{ "punpcklbw $dst,$mem\n\t"
3232             "pshuflw $dst,$dst,0x00\n\t"
3233             "punpcklqdq $dst,$dst\n\t"
3234             "vinserti128_high $dst,$dst\t! replicate32B" %}
3235   ins_encode %{
3236     __ punpcklbw($dst$$XMMRegister, $mem$$Address);
3237     __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00);
3238     __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister);
3239     __ vinserti128_high($dst$$XMMRegister, $dst$$XMMRegister);
3240   %}
3241   ins_pipe( pipe_slow );
3242 %}
3243 
3244 instruct Repl64B(legVecZ dst, rRegI src) %{
3245   predicate(n->as_Vector()->length() == 64 && !VM_Version::supports_avx512vlbw());
3246   match(Set dst (ReplicateB src));
3247   format %{ "movd    $dst,$src\n\t"
3248             "punpcklbw $dst,$dst\n\t"
3249             "pshuflw $dst,$dst,0x00\n\t"
3250             "punpcklqdq $dst,$dst\n\t"
3251             "vinserti128_high $dst,$dst\t"
3252             "vinserti64x4 $dst,$dst,$dst,0x1\t! replicate64B" %}
3253   ins_encode %{
3254     __ movdl($dst$$XMMRegister, $src$$Register);
3255     __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister);
3256     __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00);
3257     __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister);
3258     __ vinserti128_high($dst$$XMMRegister, $dst$$XMMRegister);
3259     __ vinserti64x4($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, 0x1);
3260   %}
3261   ins_pipe( pipe_slow );
3262 %}
3263 
3264 instruct Repl64B_mem(legVecZ dst, memory mem) %{
3265   predicate(n->as_Vector()->length() == 64 && !VM_Version::supports_avx512vlbw());
3266   match(Set dst (ReplicateB (LoadB mem)));
3267   format %{ "punpcklbw $dst,$mem\n\t"
3268             "pshuflw $dst,$dst,0x00\n\t"
3269             "punpcklqdq $dst,$dst\n\t"
3270             "vinserti128_high $dst,$dst\t"
3271             "vinserti64x4 $dst,$dst,$dst,0x1\t! replicate64B" %}
3272   ins_encode %{
3273     __ punpcklbw($dst$$XMMRegister, $mem$$Address);
3274     __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00);
3275     __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister);
3276     __ vinserti128_high($dst$$XMMRegister, $dst$$XMMRegister);
3277     __ vinserti64x4($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, 0x1);
3278   %}
3279   ins_pipe( pipe_slow );
3280 %}
3281 
3282 instruct Repl16B_imm(vecX dst, immI con) %{
3283   predicate(n->as_Vector()->length() == 16 && !VM_Version::supports_avx512vlbw());
3284   match(Set dst (ReplicateB con));
3285   format %{ "movq    $dst,[$constantaddress]\n\t"
3286             "punpcklqdq $dst,$dst\t! replicate16B($con)" %}
3287   ins_encode %{
3288     __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 1)));
3289     __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister);
3290   %}
3291   ins_pipe( pipe_slow );
3292 %}
3293 




3136     int vector_len = 2;
3137     __ evmovdqul($mem$$Address, $src$$XMMRegister, vector_len);
3138   %}
3139   ins_pipe( pipe_slow );
3140 %}
3141 
3142 instruct storeV64_qword(memory mem, vecZ src) %{
3143   predicate(n->as_StoreVector()->memory_size() == 64 && n->as_StoreVector()->element_size() > 4);
3144   match(Set mem (StoreVector mem src));
3145   ins_cost(145);
3146   format %{ "vmovdquq $mem k0,$src\t! store vector (64 bytes)" %}
3147   ins_encode %{
3148     int vector_len = 2;
3149     __ evmovdquq($mem$$Address, $src$$XMMRegister, vector_len);
3150   %}
3151   ins_pipe( pipe_slow );
3152 %}
3153 
3154 // ====================LEGACY REPLICATE=======================================
3155 
























3156 instruct Repl16B(vecX dst, rRegI src) %{
3157   predicate(n->as_Vector()->length() == 16 && !VM_Version::supports_avx512vlbw());
3158   match(Set dst (ReplicateB src));
3159   format %{ "movd    $dst,$src\n\t"
3160             "punpcklbw $dst,$dst\n\t"
3161             "pshuflw $dst,$dst,0x00\n\t"
3162             "punpcklqdq $dst,$dst\t! replicate16B" %}
3163   ins_encode %{
3164     __ movdl($dst$$XMMRegister, $src$$Register);
3165     __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister);
3166     __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00);
3167     __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister);
3168   %}
3169   ins_pipe( pipe_slow );
3170 %}
3171 














3172 instruct Repl32B(vecY dst, rRegI src) %{
3173   predicate(n->as_Vector()->length() == 32 && !VM_Version::supports_avx512vlbw());
3174   match(Set dst (ReplicateB src));
3175   format %{ "movd    $dst,$src\n\t"
3176             "punpcklbw $dst,$dst\n\t"
3177             "pshuflw $dst,$dst,0x00\n\t"
3178             "punpcklqdq $dst,$dst\n\t"
3179             "vinserti128_high $dst,$dst\t! replicate32B" %}
3180   ins_encode %{
3181     __ movdl($dst$$XMMRegister, $src$$Register);
3182     __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister);
3183     __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00);
3184     __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister);
3185     __ vinserti128_high($dst$$XMMRegister, $dst$$XMMRegister);
3186   %}
3187   ins_pipe( pipe_slow );
3188 %}
3189 
















3190 instruct Repl64B(legVecZ dst, rRegI src) %{
3191   predicate(n->as_Vector()->length() == 64 && !VM_Version::supports_avx512vlbw());
3192   match(Set dst (ReplicateB src));
3193   format %{ "movd    $dst,$src\n\t"
3194             "punpcklbw $dst,$dst\n\t"
3195             "pshuflw $dst,$dst,0x00\n\t"
3196             "punpcklqdq $dst,$dst\n\t"
3197             "vinserti128_high $dst,$dst\t"
3198             "vinserti64x4 $dst,$dst,$dst,0x1\t! replicate64B" %}
3199   ins_encode %{
3200     __ movdl($dst$$XMMRegister, $src$$Register);
3201     __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister);


















3202     __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00);
3203     __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister);
3204     __ vinserti128_high($dst$$XMMRegister, $dst$$XMMRegister);
3205     __ vinserti64x4($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, 0x1);
3206   %}
3207   ins_pipe( pipe_slow );
3208 %}
3209 
3210 instruct Repl16B_imm(vecX dst, immI con) %{
3211   predicate(n->as_Vector()->length() == 16 && !VM_Version::supports_avx512vlbw());
3212   match(Set dst (ReplicateB con));
3213   format %{ "movq    $dst,[$constantaddress]\n\t"
3214             "punpcklqdq $dst,$dst\t! replicate16B($con)" %}
3215   ins_encode %{
3216     __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 1)));
3217     __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister);
3218   %}
3219   ins_pipe( pipe_slow );
3220 %}
3221 


< prev index next >