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))); |