| OLD | NEW | 
|---|
| 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 #include "src/v8.h" | 9 #include "src/v8.h" | 
| 10 | 10 | 
| (...skipping 2611 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2622               set_register(rd, rm_val); | 2622               set_register(rd, rm_val); | 
| 2623               break; | 2623               break; | 
| 2624             } | 2624             } | 
| 2625           } | 2625           } | 
| 2626         } else { | 2626         } else { | 
| 2627           switch (instr->Bits(22, 21)) { | 2627           switch (instr->Bits(22, 21)) { | 
| 2628             case 0: | 2628             case 0: | 
| 2629               UNIMPLEMENTED(); | 2629               UNIMPLEMENTED(); | 
| 2630               break; | 2630               break; | 
| 2631             case 1: | 2631             case 1: | 
| 2632               UNIMPLEMENTED(); | 2632               if (instr->Bits(9, 6) == 1) { | 
|  | 2633                 if (instr->Bit(20) == 0) { | 
|  | 2634                   if (instr->Bits(19, 16) == 0xF) { | 
|  | 2635                     // Sxtb. | 
|  | 2636                     int32_t rm_val = get_register(instr->RmValue()); | 
|  | 2637                     int32_t rotate = instr->Bits(11, 10); | 
|  | 2638                     switch (rotate) { | 
|  | 2639                       case 0: | 
|  | 2640                         break; | 
|  | 2641                       case 1: | 
|  | 2642                         rm_val = (rm_val >> 8) | (rm_val << 24); | 
|  | 2643                         break; | 
|  | 2644                       case 2: | 
|  | 2645                         rm_val = (rm_val >> 16) | (rm_val << 16); | 
|  | 2646                         break; | 
|  | 2647                       case 3: | 
|  | 2648                         rm_val = (rm_val >> 24) | (rm_val << 8); | 
|  | 2649                         break; | 
|  | 2650                     } | 
|  | 2651                     set_register(rd, static_cast<int8_t>(rm_val)); | 
|  | 2652                   } else { | 
|  | 2653                     // Sxtab. | 
|  | 2654                     int32_t rn_val = get_register(rn); | 
|  | 2655                     int32_t rm_val = get_register(instr->RmValue()); | 
|  | 2656                     int32_t rotate = instr->Bits(11, 10); | 
|  | 2657                     switch (rotate) { | 
|  | 2658                       case 0: | 
|  | 2659                         break; | 
|  | 2660                       case 1: | 
|  | 2661                         rm_val = (rm_val >> 8) | (rm_val << 24); | 
|  | 2662                         break; | 
|  | 2663                       case 2: | 
|  | 2664                         rm_val = (rm_val >> 16) | (rm_val << 16); | 
|  | 2665                         break; | 
|  | 2666                       case 3: | 
|  | 2667                         rm_val = (rm_val >> 24) | (rm_val << 8); | 
|  | 2668                         break; | 
|  | 2669                     } | 
|  | 2670                     set_register(rd, rn_val + static_cast<int8_t>(rm_val)); | 
|  | 2671                   } | 
|  | 2672                 } else { | 
|  | 2673                   if (instr->Bits(19, 16) == 0xF) { | 
|  | 2674                     // Sxth. | 
|  | 2675                     int32_t rm_val = get_register(instr->RmValue()); | 
|  | 2676                     int32_t rotate = instr->Bits(11, 10); | 
|  | 2677                     switch (rotate) { | 
|  | 2678                       case 0: | 
|  | 2679                         break; | 
|  | 2680                       case 1: | 
|  | 2681                         rm_val = (rm_val >> 8) | (rm_val << 24); | 
|  | 2682                         break; | 
|  | 2683                       case 2: | 
|  | 2684                         rm_val = (rm_val >> 16) | (rm_val << 16); | 
|  | 2685                         break; | 
|  | 2686                       case 3: | 
|  | 2687                         rm_val = (rm_val >> 24) | (rm_val << 8); | 
|  | 2688                         break; | 
|  | 2689                     } | 
|  | 2690                     set_register(rd, static_cast<int16_t>(rm_val)); | 
|  | 2691                   } else { | 
|  | 2692                     // Sxtah. | 
|  | 2693                     int32_t rn_val = get_register(rn); | 
|  | 2694                     int32_t rm_val = get_register(instr->RmValue()); | 
|  | 2695                     int32_t rotate = instr->Bits(11, 10); | 
|  | 2696                     switch (rotate) { | 
|  | 2697                       case 0: | 
|  | 2698                         break; | 
|  | 2699                       case 1: | 
|  | 2700                         rm_val = (rm_val >> 8) | (rm_val << 24); | 
|  | 2701                         break; | 
|  | 2702                       case 2: | 
|  | 2703                         rm_val = (rm_val >> 16) | (rm_val << 16); | 
|  | 2704                         break; | 
|  | 2705                       case 3: | 
|  | 2706                         rm_val = (rm_val >> 24) | (rm_val << 8); | 
|  | 2707                         break; | 
|  | 2708                     } | 
|  | 2709                     set_register(rd, rn_val + static_cast<int16_t>(rm_val)); | 
|  | 2710                   } | 
|  | 2711                 } | 
|  | 2712               } else { | 
|  | 2713                 UNREACHABLE(); | 
|  | 2714               } | 
| 2633               break; | 2715               break; | 
| 2634             case 2: | 2716             case 2: | 
| 2635               if ((instr->Bit(20) == 0) && (instr->Bits(9, 6) == 1)) { | 2717               if ((instr->Bit(20) == 0) && (instr->Bits(9, 6) == 1)) { | 
| 2636                 if (instr->Bits(19, 16) == 0xF) { | 2718                 if (instr->Bits(19, 16) == 0xF) { | 
| 2637                   // Uxtb16. | 2719                   // Uxtb16. | 
| 2638                   uint32_t rm_val = get_register(instr->RmValue()); | 2720                   uint32_t rm_val = get_register(instr->RmValue()); | 
| 2639                   int32_t rotate = instr->Bits(11, 10); | 2721                   int32_t rotate = instr->Bits(11, 10); | 
| 2640                   switch (rotate) { | 2722                   switch (rotate) { | 
| 2641                     case 0: | 2723                     case 0: | 
| 2642                       break; | 2724                       break; | 
| 2643                     case 1: | 2725                     case 1: | 
| 2644                       rm_val = (rm_val >> 8) | (rm_val << 24); | 2726                       rm_val = (rm_val >> 8) | (rm_val << 24); | 
| 2645                       break; | 2727                       break; | 
| 2646                     case 2: | 2728                     case 2: | 
| 2647                       rm_val = (rm_val >> 16) | (rm_val << 16); | 2729                       rm_val = (rm_val >> 16) | (rm_val << 16); | 
| 2648                       break; | 2730                       break; | 
| 2649                     case 3: | 2731                     case 3: | 
| 2650                       rm_val = (rm_val >> 24) | (rm_val << 8); | 2732                       rm_val = (rm_val >> 24) | (rm_val << 8); | 
| 2651                       break; | 2733                       break; | 
| 2652                   } | 2734                   } | 
| 2653                   set_register(rd, | 2735                   set_register(rd, (rm_val & 0xFF) | (rm_val & 0xFF0000)); | 
| 2654                                (rm_val & 0xFF) | (rm_val & 0xFF0000)); |  | 
| 2655                 } else { | 2736                 } else { | 
| 2656                   UNIMPLEMENTED(); | 2737                   UNIMPLEMENTED(); | 
| 2657                 } | 2738                 } | 
| 2658               } else { | 2739               } else { | 
| 2659                 UNIMPLEMENTED(); | 2740                 UNIMPLEMENTED(); | 
| 2660               } | 2741               } | 
| 2661               break; | 2742               break; | 
| 2662             case 3: | 2743             case 3: | 
| 2663               if ((instr->Bit(20) == 0) && (instr->Bits(9, 6) == 1)) { | 2744               if ((instr->Bits(9, 6) == 1)) { | 
| 2664                 if (instr->Bits(19, 16) == 0xF) { | 2745                 if (instr->Bit(20) == 0) { | 
| 2665                   // Uxtb. | 2746                   if (instr->Bits(19, 16) == 0xF) { | 
| 2666                   uint32_t rm_val = get_register(instr->RmValue()); | 2747                     // Uxtb. | 
| 2667                   int32_t rotate = instr->Bits(11, 10); | 2748                     uint32_t rm_val = get_register(instr->RmValue()); | 
| 2668                   switch (rotate) { | 2749                     int32_t rotate = instr->Bits(11, 10); | 
| 2669                     case 0: | 2750                     switch (rotate) { | 
| 2670                       break; | 2751                       case 0: | 
| 2671                     case 1: | 2752                         break; | 
| 2672                       rm_val = (rm_val >> 8) | (rm_val << 24); | 2753                       case 1: | 
| 2673                       break; | 2754                         rm_val = (rm_val >> 8) | (rm_val << 24); | 
| 2674                     case 2: | 2755                         break; | 
| 2675                       rm_val = (rm_val >> 16) | (rm_val << 16); | 2756                       case 2: | 
| 2676                       break; | 2757                         rm_val = (rm_val >> 16) | (rm_val << 16); | 
| 2677                     case 3: | 2758                         break; | 
| 2678                       rm_val = (rm_val >> 24) | (rm_val << 8); | 2759                       case 3: | 
| 2679                       break; | 2760                         rm_val = (rm_val >> 24) | (rm_val << 8); | 
|  | 2761                         break; | 
|  | 2762                     } | 
|  | 2763                     set_register(rd, (rm_val & 0xFF)); | 
|  | 2764                   } else { | 
|  | 2765                     // Uxtab. | 
|  | 2766                     uint32_t rn_val = get_register(rn); | 
|  | 2767                     uint32_t rm_val = get_register(instr->RmValue()); | 
|  | 2768                     int32_t rotate = instr->Bits(11, 10); | 
|  | 2769                     switch (rotate) { | 
|  | 2770                       case 0: | 
|  | 2771                         break; | 
|  | 2772                       case 1: | 
|  | 2773                         rm_val = (rm_val >> 8) | (rm_val << 24); | 
|  | 2774                         break; | 
|  | 2775                       case 2: | 
|  | 2776                         rm_val = (rm_val >> 16) | (rm_val << 16); | 
|  | 2777                         break; | 
|  | 2778                       case 3: | 
|  | 2779                         rm_val = (rm_val >> 24) | (rm_val << 8); | 
|  | 2780                         break; | 
|  | 2781                     } | 
|  | 2782                     set_register(rd, rn_val + (rm_val & 0xFF)); | 
| 2680                   } | 2783                   } | 
| 2681                   set_register(rd, (rm_val & 0xFF)); |  | 
| 2682                 } else { | 2784                 } else { | 
| 2683                   // Uxtab. | 2785                   if (instr->Bits(19, 16) == 0xF) { | 
| 2684                   uint32_t rn_val = get_register(rn); | 2786                     // Uxth. | 
| 2685                   uint32_t rm_val = get_register(instr->RmValue()); | 2787                     uint32_t rm_val = get_register(instr->RmValue()); | 
| 2686                   int32_t rotate = instr->Bits(11, 10); | 2788                     int32_t rotate = instr->Bits(11, 10); | 
| 2687                   switch (rotate) { | 2789                     switch (rotate) { | 
| 2688                     case 0: | 2790                       case 0: | 
| 2689                       break; | 2791                         break; | 
| 2690                     case 1: | 2792                       case 1: | 
| 2691                       rm_val = (rm_val >> 8) | (rm_val << 24); | 2793                         rm_val = (rm_val >> 8) | (rm_val << 24); | 
| 2692                       break; | 2794                         break; | 
| 2693                     case 2: | 2795                       case 2: | 
| 2694                       rm_val = (rm_val >> 16) | (rm_val << 16); | 2796                         rm_val = (rm_val >> 16) | (rm_val << 16); | 
| 2695                       break; | 2797                         break; | 
| 2696                     case 3: | 2798                       case 3: | 
| 2697                       rm_val = (rm_val >> 24) | (rm_val << 8); | 2799                         rm_val = (rm_val >> 24) | (rm_val << 8); | 
| 2698                       break; | 2800                         break; | 
|  | 2801                     } | 
|  | 2802                     set_register(rd, (rm_val & 0xFFFF)); | 
|  | 2803                   } else { | 
|  | 2804                     // Uxtah. | 
|  | 2805                     uint32_t rn_val = get_register(rn); | 
|  | 2806                     uint32_t rm_val = get_register(instr->RmValue()); | 
|  | 2807                     int32_t rotate = instr->Bits(11, 10); | 
|  | 2808                     switch (rotate) { | 
|  | 2809                       case 0: | 
|  | 2810                         break; | 
|  | 2811                       case 1: | 
|  | 2812                         rm_val = (rm_val >> 8) | (rm_val << 24); | 
|  | 2813                         break; | 
|  | 2814                       case 2: | 
|  | 2815                         rm_val = (rm_val >> 16) | (rm_val << 16); | 
|  | 2816                         break; | 
|  | 2817                       case 3: | 
|  | 2818                         rm_val = (rm_val >> 24) | (rm_val << 8); | 
|  | 2819                         break; | 
|  | 2820                     } | 
|  | 2821                     set_register(rd, rn_val + (rm_val & 0xFFFF)); | 
| 2699                   } | 2822                   } | 
| 2700                   set_register(rd, rn_val + (rm_val & 0xFF)); |  | 
| 2701                 } | 2823                 } | 
| 2702               } else { | 2824               } else { | 
| 2703                 UNIMPLEMENTED(); | 2825                 UNIMPLEMENTED(); | 
| 2704               } | 2826               } | 
| 2705               break; | 2827               break; | 
| 2706           } | 2828           } | 
| 2707         } | 2829         } | 
| 2708         return; | 2830         return; | 
| 2709       } | 2831       } | 
| 2710       break; | 2832       break; | 
| (...skipping 1189 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3900   uintptr_t address = *stack_slot; | 4022   uintptr_t address = *stack_slot; | 
| 3901   set_register(sp, current_sp + sizeof(uintptr_t)); | 4023   set_register(sp, current_sp + sizeof(uintptr_t)); | 
| 3902   return address; | 4024   return address; | 
| 3903 } | 4025 } | 
| 3904 | 4026 | 
| 3905 } }  // namespace v8::internal | 4027 } }  // namespace v8::internal | 
| 3906 | 4028 | 
| 3907 #endif  // USE_SIMULATOR | 4029 #endif  // USE_SIMULATOR | 
| 3908 | 4030 | 
| 3909 #endif  // V8_TARGET_ARCH_ARM | 4031 #endif  // V8_TARGET_ARCH_ARM | 
| OLD | NEW | 
|---|