Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(376)

Side by Side Diff: src/s390/simulator-s390.cc

Issue 2045943002: [compiler] [wasm] Introduce Word32/64ReverseBytes as TF Optional Opcode (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix according to titzer Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/s390/simulator-s390.h ('k') | test/cctest/compiler/test-run-machops.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdarg.h> 5 #include <stdarg.h>
6 #include <stdlib.h> 6 #include <stdlib.h>
7 #include <cmath> 7 #include <cmath>
8 8
9 #if V8_TARGET_ARCH_S390 9 #if V8_TARGET_ARCH_S390
10 10
(...skipping 1730 matching lines...) Expand 10 before | Expand all | Expand 10 after
1741 registers_[3] = 0x50Bad4U; 1741 registers_[3] = 0x50Bad4U;
1742 registers_[12] = 0x50Bad4U; 1742 registers_[12] = 0x50Bad4U;
1743 #endif 1743 #endif
1744 } 1744 }
1745 1745
1746 uint32_t Simulator::ReadWU(intptr_t addr, Instruction* instr) { 1746 uint32_t Simulator::ReadWU(intptr_t addr, Instruction* instr) {
1747 uint32_t* ptr = reinterpret_cast<uint32_t*>(addr); 1747 uint32_t* ptr = reinterpret_cast<uint32_t*>(addr);
1748 return *ptr; 1748 return *ptr;
1749 } 1749 }
1750 1750
1751 int64_t Simulator::ReadW64(intptr_t addr, Instruction* instr) {
1752 int64_t* ptr = reinterpret_cast<int64_t*>(addr);
1753 return *ptr;
1754 }
1755
1751 int32_t Simulator::ReadW(intptr_t addr, Instruction* instr) { 1756 int32_t Simulator::ReadW(intptr_t addr, Instruction* instr) {
1752 int32_t* ptr = reinterpret_cast<int32_t*>(addr); 1757 int32_t* ptr = reinterpret_cast<int32_t*>(addr);
1753 return *ptr; 1758 return *ptr;
1754 } 1759 }
1755 1760
1756 void Simulator::WriteW(intptr_t addr, uint32_t value, Instruction* instr) { 1761 void Simulator::WriteW(intptr_t addr, uint32_t value, Instruction* instr) {
1757 uint32_t* ptr = reinterpret_cast<uint32_t*>(addr); 1762 uint32_t* ptr = reinterpret_cast<uint32_t*>(addr);
1758 *ptr = value; 1763 *ptr = value;
1759 return; 1764 return;
1760 } 1765 }
(...skipping 3745 matching lines...) Expand 10 before | Expand all | Expand 10 after
5506 break; 5511 break;
5507 } 5512 }
5508 default: 5513 default:
5509 UNREACHABLE(); 5514 UNREACHABLE();
5510 return false; 5515 return false;
5511 } 5516 }
5512 return true; 5517 return true;
5513 } 5518 }
5514 5519
5515 int16_t Simulator::ByteReverse(int16_t hword) { 5520 int16_t Simulator::ByteReverse(int16_t hword) {
5521 #if defined(__GNUC__)
5522 return __builtin_bswap16(hword);
5523 #else
5516 return (hword << 8) | ((hword >> 8) & 0x00ff); 5524 return (hword << 8) | ((hword >> 8) & 0x00ff);
5525 #endif
5517 } 5526 }
5518 5527
5519 int32_t Simulator::ByteReverse(int32_t word) { 5528 int32_t Simulator::ByteReverse(int32_t word) {
5529 #if defined(__GNUC__)
5530 return __builtin_bswap32(word);
5531 #else
5520 int32_t result = word << 24; 5532 int32_t result = word << 24;
5521 result |= (word << 8) & 0x00ff0000; 5533 result |= (word << 8) & 0x00ff0000;
5522 result |= (word >> 8) & 0x0000ff00; 5534 result |= (word >> 8) & 0x0000ff00;
5523 result |= (word >> 24) & 0x00000ff; 5535 result |= (word >> 24) & 0x00000ff;
5524 return result; 5536 return result;
5537 #endif
5538 }
5539
5540 int64_t Simulator::ByteReverse(int64_t dword) {
5541 #if defined(__GNUC__)
5542 return __builtin_bswap64(dword);
5543 #else
5544 #error unsupport __builtin_bswap64
5545 #endif
5525 } 5546 }
5526 5547
5527 int Simulator::DecodeInstructionOriginal(Instruction* instr) { 5548 int Simulator::DecodeInstructionOriginal(Instruction* instr) {
5528 int instrLength = instr->InstructionLength(); 5549 int instrLength = instr->InstructionLength();
5529 bool processed = true; 5550 bool processed = true;
5530 if (instrLength == 2) 5551 if (instrLength == 2)
5531 processed = DecodeTwoByte(instr); 5552 processed = DecodeTwoByte(instr);
5532 else if (instrLength == 4) 5553 else if (instrLength == 4)
5533 processed = DecodeFourByte(instr); 5554 processed = DecodeFourByte(instr);
5534 else if (instrLength == 6) 5555 else if (instrLength == 6)
(...skipping 4280 matching lines...) Expand 10 before | Expand all | Expand 10 after
9815 DCHECK(r1 % 2 == 0); 9836 DCHECK(r1 % 2 == 0);
9816 9837
9817 int64_t dividend = get_register(r1 + 1); 9838 int64_t dividend = get_register(r1 + 1);
9818 int64_t divisor = get_register(r2); 9839 int64_t divisor = get_register(r2);
9819 set_register(r1, dividend % divisor); 9840 set_register(r1, dividend % divisor);
9820 set_register(r1 + 1, dividend / divisor); 9841 set_register(r1 + 1, dividend / divisor);
9821 return length; 9842 return length;
9822 } 9843 }
9823 9844
9824 EVALUATE(LRVGR) { 9845 EVALUATE(LRVGR) {
9825 UNIMPLEMENTED(); 9846 DCHECK_OPCODE(LRVGR);
9826 USE(instr); 9847 DECODE_RRE_INSTRUCTION(r1, r2);
9827 return 0; 9848 int64_t r2_val = get_register(r2);
9849 int64_t r1_val = ByteReverse(r2_val);
9850
9851 set_register(r1, r1_val);
9852 return length;
9828 } 9853 }
9829 9854
9830 EVALUATE(LPGFR) { 9855 EVALUATE(LPGFR) {
9831 UNIMPLEMENTED(); 9856 UNIMPLEMENTED();
9832 USE(instr); 9857 USE(instr);
9833 return 0; 9858 return 0;
9834 } 9859 }
9835 9860
9836 EVALUATE(LNGFR) { 9861 EVALUATE(LNGFR) {
9837 UNIMPLEMENTED(); 9862 UNIMPLEMENTED();
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
9930 return 0; 9955 return 0;
9931 } 9956 }
9932 9957
9933 EVALUATE(KMAC) { 9958 EVALUATE(KMAC) {
9934 UNIMPLEMENTED(); 9959 UNIMPLEMENTED();
9935 USE(instr); 9960 USE(instr);
9936 return 0; 9961 return 0;
9937 } 9962 }
9938 9963
9939 EVALUATE(LRVR) { 9964 EVALUATE(LRVR) {
9940 UNIMPLEMENTED(); 9965 DCHECK_OPCODE(LRVR);
9941 USE(instr); 9966 DECODE_RRE_INSTRUCTION(r1, r2);
9942 return 0; 9967 int32_t r2_val = get_low_register<int32_t>(r2);
9968 int32_t r1_val = ByteReverse(r2_val);
9969
9970 set_low_register(r1, r1_val);
9971 return length;
9943 } 9972 }
9944 9973
9945 EVALUATE(CGR) { 9974 EVALUATE(CGR) {
9946 DCHECK_OPCODE(CGR); 9975 DCHECK_OPCODE(CGR);
9947 DECODE_RRE_INSTRUCTION(r1, r2); 9976 DECODE_RRE_INSTRUCTION(r1, r2);
9948 // Compare (64) 9977 // Compare (64)
9949 int64_t r1_val = get_register(r1); 9978 int64_t r1_val = get_register(r1);
9950 int64_t r2_val = get_register(r2); 9979 int64_t r2_val = get_register(r2);
9951 SetS390ConditionCode<int64_t>(r1_val, r2_val); 9980 SetS390ConditionCode<int64_t>(r1_val, r2_val);
9952 return length; 9981 return length;
(...skipping 778 matching lines...) Expand 10 before | Expand all | Expand 10 after
10731 USE(instr); 10760 USE(instr);
10732 return 0; 10761 return 0;
10733 } 10762 }
10734 10763
10735 EVALUATE(CVBG) { 10764 EVALUATE(CVBG) {
10736 UNIMPLEMENTED(); 10765 UNIMPLEMENTED();
10737 USE(instr); 10766 USE(instr);
10738 return 0; 10767 return 0;
10739 } 10768 }
10740 10769
10741 EVALUATE(LRVG) {
10742 UNIMPLEMENTED();
10743 USE(instr);
10744 return 0;
10745 }
10746
10747 EVALUATE(LT) { 10770 EVALUATE(LT) {
10748 DCHECK_OPCODE(LT); 10771 DCHECK_OPCODE(LT);
10749 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2); 10772 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
10750 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); 10773 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
10751 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); 10774 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10752 intptr_t addr = x2_val + b2_val + d2; 10775 intptr_t addr = x2_val + b2_val + d2;
10753 int32_t value = ReadW(addr, instr); 10776 int32_t value = ReadW(addr, instr);
10754 set_low_register(r1, value); 10777 set_low_register(r1, value);
10755 SetS390ConditionCode<int32_t>(value, 0); 10778 SetS390ConditionCode<int32_t>(value, 0);
10756 return length; 10779 return length;
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
10833 USE(instr); 10856 USE(instr);
10834 return 0; 10857 return 0;
10835 } 10858 }
10836 10859
10837 EVALUATE(DSGF) { 10860 EVALUATE(DSGF) {
10838 UNIMPLEMENTED(); 10861 UNIMPLEMENTED();
10839 USE(instr); 10862 USE(instr);
10840 return 0; 10863 return 0;
10841 } 10864 }
10842 10865
10866 EVALUATE(LRVG) {
10867 DCHECK_OPCODE(LRVG);
10868 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
10869 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
10870 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10871 intptr_t mem_addr = b2_val + x2_val + d2;
10872 int64_t mem_val = ReadW64(mem_addr, instr);
10873 set_register(r1, ByteReverse(mem_val));
10874 return length;
10875 }
10876
10843 EVALUATE(LRV) { 10877 EVALUATE(LRV) {
10844 DCHECK_OPCODE(LRV); 10878 DCHECK_OPCODE(LRV);
10845 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2); 10879 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
10846 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); 10880 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
10847 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); 10881 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10848 intptr_t mem_addr = b2_val + x2_val + d2; 10882 intptr_t mem_addr = b2_val + x2_val + d2;
10849 int32_t mem_val = ReadW(mem_addr, instr); 10883 int32_t mem_val = ReadW(mem_addr, instr);
10850 set_low_register(r1, ByteReverse(mem_val)); 10884 set_low_register(r1, ByteReverse(mem_val));
10851 return length; 10885 return length;
10852 } 10886 }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
10900 USE(instr); 10934 USE(instr);
10901 return 0; 10935 return 0;
10902 } 10936 }
10903 10937
10904 EVALUATE(CVDG) { 10938 EVALUATE(CVDG) {
10905 UNIMPLEMENTED(); 10939 UNIMPLEMENTED();
10906 USE(instr); 10940 USE(instr);
10907 return 0; 10941 return 0;
10908 } 10942 }
10909 10943
10910 EVALUATE(STRVG) {
10911 UNIMPLEMENTED();
10912 USE(instr);
10913 return 0;
10914 }
10915
10916 EVALUATE(CGF) { 10944 EVALUATE(CGF) {
10917 UNIMPLEMENTED(); 10945 UNIMPLEMENTED();
10918 USE(instr); 10946 USE(instr);
10919 return 0; 10947 return 0;
10920 } 10948 }
10921 10949
10922 EVALUATE(CLGF) { 10950 EVALUATE(CLGF) {
10923 UNIMPLEMENTED(); 10951 UNIMPLEMENTED();
10924 USE(instr); 10952 USE(instr);
10925 return 0; 10953 return 0;
(...skipping 21 matching lines...) Expand all
10947 DCHECK_OPCODE(STRV); 10975 DCHECK_OPCODE(STRV);
10948 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2); 10976 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
10949 int32_t r1_val = get_low_register<int32_t>(r1); 10977 int32_t r1_val = get_low_register<int32_t>(r1);
10950 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); 10978 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
10951 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); 10979 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10952 intptr_t mem_addr = b2_val + x2_val + d2; 10980 intptr_t mem_addr = b2_val + x2_val + d2;
10953 WriteW(mem_addr, ByteReverse(r1_val), instr); 10981 WriteW(mem_addr, ByteReverse(r1_val), instr);
10954 return length; 10982 return length;
10955 } 10983 }
10956 10984
10985 EVALUATE(STRVG) {
10986 DCHECK_OPCODE(STRVG);
10987 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
10988 int64_t r1_val = get_register(r1);
10989 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
10990 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10991 intptr_t mem_addr = b2_val + x2_val + d2;
10992 WriteDW(mem_addr, ByteReverse(r1_val));
10993 return length;
10994 }
10995
10957 EVALUATE(STRVH) { 10996 EVALUATE(STRVH) {
10958 DCHECK_OPCODE(STRVH); 10997 DCHECK_OPCODE(STRVH);
10959 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2); 10998 DECODE_RXY_A_INSTRUCTION(r1, x2, b2, d2);
10960 int32_t r1_val = get_low_register<int32_t>(r1); 10999 int32_t r1_val = get_low_register<int32_t>(r1);
10961 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2); 11000 int64_t x2_val = (x2 == 0) ? 0 : get_register(x2);
10962 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2); 11001 int64_t b2_val = (b2 == 0) ? 0 : get_register(b2);
10963 intptr_t mem_addr = b2_val + x2_val + d2; 11002 intptr_t mem_addr = b2_val + x2_val + d2;
10964 int16_t result = static_cast<int16_t>(r1_val >> 16); 11003 int16_t result = static_cast<int16_t>(r1_val >> 16);
10965 WriteH(mem_addr, ByteReverse(result), instr); 11004 WriteH(mem_addr, ByteReverse(result), instr);
10966 return length; 11005 return length;
(...skipping 1553 matching lines...) Expand 10 before | Expand all | Expand 10 after
12520 return 0; 12559 return 0;
12521 } 12560 }
12522 12561
12523 #undef EVALUATE 12562 #undef EVALUATE
12524 12563
12525 } // namespace internal 12564 } // namespace internal
12526 } // namespace v8 12565 } // namespace v8
12527 12566
12528 #endif // USE_SIMULATOR 12567 #endif // USE_SIMULATOR
12529 #endif // V8_TARGET_ARCH_S390 12568 #endif // V8_TARGET_ARCH_S390
OLDNEW
« no previous file with comments | « src/s390/simulator-s390.h ('k') | test/cctest/compiler/test-run-machops.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698