src/cpu/x86/vm/x86_64.ad

Print this page




7354 //----------BSWAP Instructions-------------------------------------------------
7355 instruct bytes_reverse_int(rRegI dst) %{
7356   match(Set dst (ReverseBytesI dst));
7357 
7358   format %{ "bswapl  $dst" %}
7359   opcode(0x0F, 0xC8);  /*Opcode 0F /C8 */
7360   ins_encode( REX_reg(dst), OpcP, opc2_reg(dst) );
7361   ins_pipe( ialu_reg );
7362 %}
7363 
7364 instruct bytes_reverse_long(rRegL dst) %{
7365   match(Set dst (ReverseBytesL dst));
7366 
7367   format %{ "bswapq  $dst" %}
7368 
7369   opcode(0x0F, 0xC8); /* Opcode 0F /C8 */
7370   ins_encode( REX_reg_wide(dst), OpcP, opc2_reg(dst) );
7371   ins_pipe( ialu_reg);
7372 %}
7373 
























7374 instruct loadI_reversed(rRegI dst, memory src) %{
7375   match(Set dst (ReverseBytesI (LoadI src)));
7376 
7377   format %{ "bswap_movl $dst, $src" %}
7378   opcode(0x8B, 0x0F, 0xC8); /* Opcode 8B 0F C8 */
7379   ins_encode(REX_reg_mem(dst, src), OpcP, reg_mem(dst, src), REX_reg(dst), OpcS, opc3_reg(dst));
7380   ins_pipe( ialu_reg_mem );
7381 %}
7382 
7383 instruct loadL_reversed(rRegL dst, memory src) %{
7384   match(Set dst (ReverseBytesL (LoadL src)));
7385 
7386   format %{ "bswap_movq $dst, $src" %}
7387   opcode(0x8B, 0x0F, 0xC8); /* Opcode 8B 0F C8 */
7388   ins_encode(REX_reg_mem_wide(dst, src), OpcP, reg_mem(dst, src), REX_reg_wide(dst), OpcS, opc3_reg(dst));
7389   ins_pipe( ialu_reg_mem );
7390 %}
7391 
7392 instruct storeI_reversed(memory dst, rRegI src) %{
7393   match(Set dst (StoreI dst (ReverseBytesI  src)));




7354 //----------BSWAP Instructions-------------------------------------------------
7355 instruct bytes_reverse_int(rRegI dst) %{
7356   match(Set dst (ReverseBytesI dst));
7357 
7358   format %{ "bswapl  $dst" %}
7359   opcode(0x0F, 0xC8);  /*Opcode 0F /C8 */
7360   ins_encode( REX_reg(dst), OpcP, opc2_reg(dst) );
7361   ins_pipe( ialu_reg );
7362 %}
7363 
7364 instruct bytes_reverse_long(rRegL dst) %{
7365   match(Set dst (ReverseBytesL dst));
7366 
7367   format %{ "bswapq  $dst" %}
7368 
7369   opcode(0x0F, 0xC8); /* Opcode 0F /C8 */
7370   ins_encode( REX_reg_wide(dst), OpcP, opc2_reg(dst) );
7371   ins_pipe( ialu_reg);
7372 %}
7373 
7374 instruct bytes_reverse_char(rRegI dst) %{
7375   match(Set dst (ReverseBytesC dst));
7376 
7377   format %{ "bswapl  $dst\n\t" 
7378             "shrl    $dst,16\n\t" %}
7379   ins_encode %{
7380     __ bswapl($dst$$Register);
7381     __ shrl($dst$$Register, 16); 
7382   %}
7383   ins_pipe( ialu_reg );
7384 %}
7385 
7386 instruct bytes_reverse_short(rRegI dst) %{
7387   match(Set dst (ReverseBytesS dst));
7388 
7389   format %{ "bswapl  $dst\n\t" 
7390             "sar     $dst,16\n\t" %}
7391   ins_encode %{
7392     __ bswapl($dst$$Register);
7393     __ sarl($dst$$Register, 16); 
7394   %}
7395   ins_pipe( ialu_reg );
7396 %}
7397 
7398 instruct loadI_reversed(rRegI dst, memory src) %{
7399   match(Set dst (ReverseBytesI (LoadI src)));
7400 
7401   format %{ "bswap_movl $dst, $src" %}
7402   opcode(0x8B, 0x0F, 0xC8); /* Opcode 8B 0F C8 */
7403   ins_encode(REX_reg_mem(dst, src), OpcP, reg_mem(dst, src), REX_reg(dst), OpcS, opc3_reg(dst));
7404   ins_pipe( ialu_reg_mem );
7405 %}
7406 
7407 instruct loadL_reversed(rRegL dst, memory src) %{
7408   match(Set dst (ReverseBytesL (LoadL src)));
7409 
7410   format %{ "bswap_movq $dst, $src" %}
7411   opcode(0x8B, 0x0F, 0xC8); /* Opcode 8B 0F C8 */
7412   ins_encode(REX_reg_mem_wide(dst, src), OpcP, reg_mem(dst, src), REX_reg_wide(dst), OpcS, opc3_reg(dst));
7413   ins_pipe( ialu_reg_mem );
7414 %}
7415 
7416 instruct storeI_reversed(memory dst, rRegI src) %{
7417   match(Set dst (StoreI dst (ReverseBytesI  src)));