1*424fb153SAndroid Build Coastguard Worker // Copyright 2008 Google Inc. All Rights Reserved. 2*424fb153SAndroid Build Coastguard Worker 3*424fb153SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 4*424fb153SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 5*424fb153SAndroid Build Coastguard Worker // You may obtain a copy of the License at 6*424fb153SAndroid Build Coastguard Worker 7*424fb153SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 8*424fb153SAndroid Build Coastguard Worker 9*424fb153SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*424fb153SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 11*424fb153SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*424fb153SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 13*424fb153SAndroid Build Coastguard Worker // limitations under the License. 14*424fb153SAndroid Build Coastguard Worker 15*424fb153SAndroid Build Coastguard Worker #ifndef STRESSAPPTEST_ADLER32MEMCPY_H_ 16*424fb153SAndroid Build Coastguard Worker #define STRESSAPPTEST_ADLER32MEMCPY_H_ 17*424fb153SAndroid Build Coastguard Worker 18*424fb153SAndroid Build Coastguard Worker #include <string> 19*424fb153SAndroid Build Coastguard Worker #include "sattypes.h" 20*424fb153SAndroid Build Coastguard Worker 21*424fb153SAndroid Build Coastguard Worker // Encapsulation for Adler checksum. Please see adler32memcpy.cc for more 22*424fb153SAndroid Build Coastguard Worker // detail on the adler checksum algorithm. 23*424fb153SAndroid Build Coastguard Worker class AdlerChecksum { 24*424fb153SAndroid Build Coastguard Worker public: AdlerChecksum()25*424fb153SAndroid Build Coastguard Worker AdlerChecksum() {} ~AdlerChecksum()26*424fb153SAndroid Build Coastguard Worker ~AdlerChecksum() {} 27*424fb153SAndroid Build Coastguard Worker // Returns true if the checksums are equal. 28*424fb153SAndroid Build Coastguard Worker bool Equals(const AdlerChecksum &other) const; 29*424fb153SAndroid Build Coastguard Worker // Returns string representation of the Adler checksum 30*424fb153SAndroid Build Coastguard Worker string ToHexString() const; 31*424fb153SAndroid Build Coastguard Worker // Sets components of the Adler checksum. 32*424fb153SAndroid Build Coastguard Worker void Set(uint64 a1, uint64 a2, uint64 b1, uint64 b2); 33*424fb153SAndroid Build Coastguard Worker 34*424fb153SAndroid Build Coastguard Worker private: 35*424fb153SAndroid Build Coastguard Worker // Components of Adler checksum. 36*424fb153SAndroid Build Coastguard Worker uint64 a1_, a2_, b1_, b2_; 37*424fb153SAndroid Build Coastguard Worker 38*424fb153SAndroid Build Coastguard Worker DISALLOW_COPY_AND_ASSIGN(AdlerChecksum); 39*424fb153SAndroid Build Coastguard Worker }; 40*424fb153SAndroid Build Coastguard Worker 41*424fb153SAndroid Build Coastguard Worker // Calculates Adler checksum for supplied data. 42*424fb153SAndroid Build Coastguard Worker bool CalculateAdlerChecksum(uint64 *data64, unsigned int size_in_bytes, 43*424fb153SAndroid Build Coastguard Worker AdlerChecksum *checksum); 44*424fb153SAndroid Build Coastguard Worker 45*424fb153SAndroid Build Coastguard Worker // C implementation of Adler memory copy. 46*424fb153SAndroid Build Coastguard Worker bool AdlerMemcpyC(uint64 *dstmem64, uint64 *srcmem64, 47*424fb153SAndroid Build Coastguard Worker unsigned int size_in_bytes, AdlerChecksum *checksum); 48*424fb153SAndroid Build Coastguard Worker 49*424fb153SAndroid Build Coastguard Worker // C implementation of Adler memory copy with some float point ops, 50*424fb153SAndroid Build Coastguard Worker // attempting to warm up the CPU. 51*424fb153SAndroid Build Coastguard Worker bool AdlerMemcpyWarmC(uint64 *dstmem64, uint64 *srcmem64, 52*424fb153SAndroid Build Coastguard Worker unsigned int size_in_bytes, AdlerChecksum *checksum); 53*424fb153SAndroid Build Coastguard Worker 54*424fb153SAndroid Build Coastguard Worker // x86_64 SSE2 assembly implementation of fast and stressful Adler memory copy. 55*424fb153SAndroid Build Coastguard Worker bool AdlerMemcpyAsm(uint64 *dstmem64, uint64 *srcmem64, 56*424fb153SAndroid Build Coastguard Worker unsigned int size_in_bytes, AdlerChecksum *checksum); 57*424fb153SAndroid Build Coastguard Worker 58*424fb153SAndroid Build Coastguard Worker 59*424fb153SAndroid Build Coastguard Worker #endif // STRESSAPPTEST_ADLER32MEMCPY_H_ 60