< prev index next >

src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp

Print this page
rev 53302 : 8216060: [PPC64] Vector CRC implementation should be used by interpreter and be faster for short arrays
Reviewed-by: gromero, goetz

*** 1,8 **** /* ! * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. ! * Copyright (c) 2015, 2018, SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,8 ---- /* ! * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. ! * Copyright (c) 2015, 2019, SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 1916,1929 **** __ addi(data, data, arrayOopDesc::base_offset_in_bytes(T_BYTE)); } StubRoutines::ppc64::generate_load_crc_table_addr(_masm, table); ! // Performance measurements show the 1word and 2word variants to be almost equivalent, ! // with very light advantages for the 1word variant. We chose the 1word variant for ! // code compactness. __ kernel_crc32_1word(crc, data, dataLen, table, t0, t1, t2, t3, tc0, tc1, tc2, tc3, 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(); --- 1916,1931 ---- __ addi(data, data, arrayOopDesc::base_offset_in_bytes(T_BYTE)); } StubRoutines::ppc64::generate_load_crc_table_addr(_masm, table); ! if (!VM_Version::has_vpmsumb()) { __ kernel_crc32_1word(crc, data, dataLen, table, t0, t1, t2, t3, tc0, tc1, tc2, tc3, true); + } else { + StubRoutines::ppc64::generate_load_crc_constants_addr(_masm, t0); + __ kernel_crc32_vpmsum(crc, data, dataLen, table, t0, t1, t2, t3, tc0, tc1, tc2, 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();
*** 2004,2017 **** __ addi(data, data, arrayOopDesc::base_offset_in_bytes(T_BYTE)); } StubRoutines::ppc64::generate_load_crc32c_table_addr(_masm, table); ! // Performance measurements show the 1word and 2word variants to be almost equivalent, ! // with very light advantages for the 1word variant. We chose the 1word variant for ! // code compactness. __ kernel_crc32_1word(crc, data, dataLen, table, t0, t1, t2, t3, tc0, tc1, tc2, tc3, false); // 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(); --- 2006,2021 ---- __ addi(data, data, arrayOopDesc::base_offset_in_bytes(T_BYTE)); } StubRoutines::ppc64::generate_load_crc32c_table_addr(_masm, table); ! if (!VM_Version::has_vpmsumb()) { __ kernel_crc32_1word(crc, data, dataLen, table, t0, t1, t2, t3, tc0, tc1, tc2, tc3, false); + } else { + StubRoutines::ppc64::generate_load_crc32c_constants_addr(_masm, t0); + __ kernel_crc32_vpmsum(crc, data, dataLen, table, t0, t1, t2, t3, tc0, tc1, tc2, false); + } // 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 >