< prev index next >

src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp

Print this page
rev 53463 : 8217459: [PPC64] Cleanup non-vector version of CRC32
Reviewed-by: gromero

*** 1813,1841 **** // Load java parameters. // R15_esp is callers operand stack pointer, i.e. it points to the parameters. const Register argP = R15_esp; const Register crc = R3_ARG1; // crc value ! const Register data = R4_ARG2; // address of java byte value (kernel_crc32 needs address) ! const Register dataLen = R5_ARG3; // source data len (1 byte). Not used because calling the single-byte emitter. ! const Register table = R6_ARG4; // address of crc32 table ! const Register tmp = dataLen; // Reuse unused len register to show we don't actually need a separate tmp here. BLOCK_COMMENT("CRC32_update {"); // Arguments are reversed on java expression stack #ifdef VM_LITTLE_ENDIAN ! __ addi(data, argP, 0+1*wordSize); // (stack) address of byte value. Emitter expects address, not value. // Being passed as an int, the single byte is at offset +0. #else ! __ addi(data, argP, 3+1*wordSize); // (stack) address of byte value. Emitter expects address, not value. // Being passed from java as an int, the single byte is at offset +3. #endif __ lwz(crc, 2*wordSize, argP); // Current crc state, zero extend to 64 bit to have a clean register. ! __ load_const_optimized(table, StubRoutines::crc_table_addr(), R0); ! __ kernel_crc32_singleByte(crc, data, dataLen, table, tmp, true); // Restore caller sp for c2i case (from compiled) and for resized sender frame (from interpreted). __ resize_frame_absolute(R21_sender_SP, R11_scratch1, R0); __ blr(); --- 1813,1839 ---- // Load java parameters. // R15_esp is callers operand stack pointer, i.e. it points to the parameters. const Register argP = R15_esp; const Register crc = R3_ARG1; // crc value ! const Register data = R4_ARG2; ! const Register table = R5_ARG3; // address of crc32 table BLOCK_COMMENT("CRC32_update {"); // Arguments are reversed on java expression stack #ifdef VM_LITTLE_ENDIAN ! int data_offs = 0+1*wordSize; // (stack) address of byte value. Emitter expects address, not value. // Being passed as an int, the single byte is at offset +0. #else ! int data_offs = 3+1*wordSize; // (stack) address of byte value. Emitter expects address, not value. // Being passed from java as an int, the single byte is at offset +3. #endif __ lwz(crc, 2*wordSize, argP); // Current crc state, zero extend to 64 bit to have a clean register. ! __ lbz(data, data_offs, argP); // Byte from buffer, zero-extended. __ load_const_optimized(table, StubRoutines::crc_table_addr(), R0); ! __ kernel_crc32_singleByteReg(crc, data, table, true); // Restore caller sp for c2i case (from compiled) and for resized sender frame (from interpreted). __ resize_frame_absolute(R21_sender_SP, R11_scratch1, R0); __ blr();
< prev index next >