< prev index next >
src/cpu/s390/vm/macroAssembler_s390.hpp
Print this page
@@ -1,8 +1,8 @@
/*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2016 SAP SE. All rights reserved.
+ * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2017, 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.
@@ -1002,26 +1002,39 @@
// the numbers of 8-byte words.
void zap_from_to(Register low, Register high, Register tmp1 = Z_R0, Register tmp2 = Z_R1,
int before = 0, int after = 0) PRODUCT_RETURN;
// Emitters for CRC32 calculation.
+ // A note on invertCRC:
+ // Unfortunately, internal representation of crc differs between CRC32 and CRC32C.
+ // CRC32 holds it's current crc value in the externally visible representation.
+ // CRC32C holds it's current crc value in internal format, ready for updating.
+ // Thus, the crc value mut be bit-flipped before updating it in the CRC32 case.
+ // In the CRC32C case, it must be bit-flipped when it is given to the outside world (getValue()).
+ // The bool invertCRC parameter indicates whether bit-flipping is required before updates.
private:
void fold_byte_crc32(Register crc, Register table, Register val, Register tmp);
void fold_8bit_crc32(Register crc, Register table, Register tmp);
+ void update_byte_crc32( Register crc, Register val, Register table);
void update_byteLoop_crc32(Register crc, Register buf, Register len, Register table,
- Register data, bool invertCRC);
+ Register data);
void update_1word_crc32(Register crc, Register buf, Register table, int bufDisp, int bufInc,
Register t0, Register t1, Register t2, Register t3);
public:
- void update_byte_crc32( Register crc, Register val, Register table);
- void kernel_crc32_singleByte(Register crc, Register buf, Register len, Register table, Register tmp);
+ void kernel_crc32_singleByteReg(Register crc, Register val, Register table,
+ bool invertCRC);
+ void kernel_crc32_singleByte(Register crc, Register buf, Register len, Register table, Register tmp,
+ bool invertCRC);
void kernel_crc32_1byte(Register crc, Register buf, Register len, Register table,
- Register t0, Register t1, Register t2, Register t3);
+ Register t0, Register t1, Register t2, Register t3,
+ bool invertCRC);
void kernel_crc32_1word(Register crc, Register buf, Register len, Register table,
- Register t0, Register t1, Register t2, Register t3);
+ Register t0, Register t1, Register t2, Register t3,
+ bool invertCRC);
void kernel_crc32_2word(Register crc, Register buf, Register len, Register table,
- Register t0, Register t1, Register t2, Register t3);
+ Register t0, Register t1, Register t2, Register t3,
+ bool invertCRC);
// Emitters for BigInteger.multiplyToLen intrinsic
// note: length of result array (zlen) is passed on the stack
private:
void add2_with_carry(Register dest_hi, Register dest_lo,
< prev index next >