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

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

Issue 1698483002: [arm][arm64] Improve CountTrailingZero implementation. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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/arm/disasm-arm.cc ('k') | src/compiler/arm/code-generator-arm.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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_ARM 9 #if V8_TARGET_ARCH_ARM
10 10
(...skipping 2629 matching lines...) Expand 10 before | Expand all | Expand 10 after
2640 } else { 2640 } else {
2641 if (instr->HasL()) { 2641 if (instr->HasL()) {
2642 set_register(rd, ReadW(addr, instr)); 2642 set_register(rd, ReadW(addr, instr));
2643 } else { 2643 } else {
2644 WriteW(addr, get_register(rd), instr); 2644 WriteW(addr, get_register(rd), instr);
2645 } 2645 }
2646 } 2646 }
2647 } 2647 }
2648 2648
2649 2649
2650 static uint32_t ReverseBits(uint32_t value) {
titzer 2016/02/14 11:18:34 Good candidate for src/base/bits.cc?
Rodolph Perfetta 2016/02/15 17:56:01 Done.
2651 uint32_t result = 0;
2652 for (unsigned i = 0; i < 32; ++i) {
2653 result = (result << 1) | (value & 1);
2654 value >>= 1;
2655 }
2656 return result;
2657 }
2658
2659
2650 void Simulator::DecodeType3(Instruction* instr) { 2660 void Simulator::DecodeType3(Instruction* instr) {
2651 int rd = instr->RdValue(); 2661 int rd = instr->RdValue();
2652 int rn = instr->RnValue(); 2662 int rn = instr->RnValue();
2653 int32_t rn_val = get_register(rn); 2663 int32_t rn_val = get_register(rn);
2654 bool shifter_carry_out = 0; 2664 bool shifter_carry_out = 0;
2655 int32_t shifter_operand = GetShiftRm(instr, &shifter_carry_out); 2665 int32_t shifter_operand = GetShiftRm(instr, &shifter_carry_out);
2656 int32_t addr = 0; 2666 int32_t addr = 0;
2657 switch (instr->PUField()) { 2667 switch (instr->PUField()) {
2658 case da_x: { 2668 case da_x: {
2659 DCHECK(!instr->HasW()); 2669 DCHECK(!instr->HasW());
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
2913 rm_val = (rm_val >> 16) | (rm_val << 16); 2923 rm_val = (rm_val >> 16) | (rm_val << 16);
2914 break; 2924 break;
2915 case 3: 2925 case 3:
2916 rm_val = (rm_val >> 24) | (rm_val << 8); 2926 rm_val = (rm_val >> 24) | (rm_val << 8);
2917 break; 2927 break;
2918 } 2928 }
2919 set_register(rd, rn_val + (rm_val & 0xFFFF)); 2929 set_register(rd, rn_val + (rm_val & 0xFFFF));
2920 } 2930 }
2921 } 2931 }
2922 } else { 2932 } else {
2923 UNIMPLEMENTED(); 2933 // PU == 0b01, BW == 0b11, Bits(9, 6) != 0b0001
2934 if ((instr->Bits(20, 16) == 0x1f) &&
2935 (instr->Bits(11, 4) == 0xf3)) {
2936 // Rbit.
2937 uint32_t rm_val = get_register(instr->RmValue());
2938 set_register(rd, ReverseBits(rm_val));
2939 } else {
2940 UNIMPLEMENTED();
2941 }
2924 } 2942 }
2925 break; 2943 break;
2926 } 2944 }
2927 } 2945 }
2928 return; 2946 return;
2929 } 2947 }
2930 break; 2948 break;
2931 } 2949 }
2932 case db_x: { 2950 case db_x: {
2933 if (instr->Bits(22, 20) == 0x5) { 2951 if (instr->Bits(22, 20) == 0x5) {
(...skipping 1281 matching lines...) Expand 10 before | Expand all | Expand 10 after
4215 set_register(sp, current_sp + sizeof(uintptr_t)); 4233 set_register(sp, current_sp + sizeof(uintptr_t));
4216 return address; 4234 return address;
4217 } 4235 }
4218 4236
4219 } // namespace internal 4237 } // namespace internal
4220 } // namespace v8 4238 } // namespace v8
4221 4239
4222 #endif // USE_SIMULATOR 4240 #endif // USE_SIMULATOR
4223 4241
4224 #endif // V8_TARGET_ARCH_ARM 4242 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/disasm-arm.cc ('k') | src/compiler/arm/code-generator-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698