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

Side by Side Diff: src/ppc/assembler-ppc.cc

Issue 2625013002: PPC: Enable P9 and implement mod[s|u][d|w] instr (Closed)
Patch Set: rebased Created 3 years, 11 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/ppc/assembler-ppc.h ('k') | src/ppc/constants-ppc.h » ('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 (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions 5 // modification, are permitted provided that the following conditions
6 // are met: 6 // are met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 59
60 // Only use statically determined features for cross compile (snapshot). 60 // Only use statically determined features for cross compile (snapshot).
61 if (cross_compile) return; 61 if (cross_compile) return;
62 62
63 // Detect whether frim instruction is supported (POWER5+) 63 // Detect whether frim instruction is supported (POWER5+)
64 // For now we will just check for processors we know do not 64 // For now we will just check for processors we know do not
65 // support it 65 // support it
66 #ifndef USE_SIMULATOR 66 #ifndef USE_SIMULATOR
67 // Probe for additional features at runtime. 67 // Probe for additional features at runtime.
68 base::CPU cpu; 68 base::CPU cpu;
69 if (cpu.part() == base::CPU::PPC_POWER9) {
70 supported_ |= (1u << MODULO);
71 }
69 #if V8_TARGET_ARCH_PPC64 72 #if V8_TARGET_ARCH_PPC64
70 if (cpu.part() == base::CPU::PPC_POWER8) { 73 if (cpu.part() == base::CPU::PPC_POWER8) {
71 supported_ |= (1u << FPR_GPR_MOV); 74 supported_ |= (1u << FPR_GPR_MOV);
72 } 75 }
73 #endif 76 #endif
74 if (cpu.part() == base::CPU::PPC_POWER6 || 77 if (cpu.part() == base::CPU::PPC_POWER6 ||
75 cpu.part() == base::CPU::PPC_POWER7 || 78 cpu.part() == base::CPU::PPC_POWER7 ||
76 cpu.part() == base::CPU::PPC_POWER8) { 79 cpu.part() == base::CPU::PPC_POWER8) {
77 supported_ |= (1u << LWSYNC); 80 supported_ |= (1u << LWSYNC);
78 } 81 }
(...skipping 12 matching lines...) Expand all
91 } 94 }
92 #elif V8_OS_AIX 95 #elif V8_OS_AIX
93 // Assume support FP support and default cache line size 96 // Assume support FP support and default cache line size
94 supported_ |= (1u << FPU); 97 supported_ |= (1u << FPU);
95 #endif 98 #endif
96 #else // Simulator 99 #else // Simulator
97 supported_ |= (1u << FPU); 100 supported_ |= (1u << FPU);
98 supported_ |= (1u << LWSYNC); 101 supported_ |= (1u << LWSYNC);
99 supported_ |= (1u << ISELECT); 102 supported_ |= (1u << ISELECT);
100 supported_ |= (1u << VSX); 103 supported_ |= (1u << VSX);
104 supported_ |= (1u << MODULO);
101 #if V8_TARGET_ARCH_PPC64 105 #if V8_TARGET_ARCH_PPC64
102 supported_ |= (1u << FPR_GPR_MOV); 106 supported_ |= (1u << FPR_GPR_MOV);
103 #endif 107 #endif
104 #endif 108 #endif
105 } 109 }
106 110
107 111
108 void CpuFeatures::PrintTarget() { 112 void CpuFeatures::PrintTarget() {
109 const char* ppc_arch = NULL; 113 const char* ppc_arch = NULL;
110 114
(...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after
944 xo_form(EXT2 | DIVW, dst, src1, src2, o, r); 948 xo_form(EXT2 | DIVW, dst, src1, src2, o, r);
945 } 949 }
946 950
947 951
948 // Divide word unsigned 952 // Divide word unsigned
949 void Assembler::divwu(Register dst, Register src1, Register src2, OEBit o, 953 void Assembler::divwu(Register dst, Register src1, Register src2, OEBit o,
950 RCBit r) { 954 RCBit r) {
951 xo_form(EXT2 | DIVWU, dst, src1, src2, o, r); 955 xo_form(EXT2 | DIVWU, dst, src1, src2, o, r);
952 } 956 }
953 957
958 void Assembler::modsw(Register rt, Register ra, Register rb) {
959 x_form(EXT2 | MODSW, ra, rt, rb, LeaveRC);
960 }
961
962 void Assembler::moduw(Register rt, Register ra, Register rb) {
963 x_form(EXT2 | MODUW, ra, rt, rb, LeaveRC);
964 }
954 965
955 void Assembler::addi(Register dst, Register src, const Operand& imm) { 966 void Assembler::addi(Register dst, Register src, const Operand& imm) {
956 DCHECK(!src.is(r0)); // use li instead to show intent 967 DCHECK(!src.is(r0)); // use li instead to show intent
957 d_form(ADDI, dst, src, imm.imm_, true); 968 d_form(ADDI, dst, src, imm.imm_, true);
958 } 969 }
959 970
960 971
961 void Assembler::addis(Register dst, Register src, const Operand& imm) { 972 void Assembler::addis(Register dst, Register src, const Operand& imm) {
962 DCHECK(!src.is(r0)); // use lis instead to show intent 973 DCHECK(!src.is(r0)); // use lis instead to show intent
963 d_form(ADDIS, dst, src, imm.imm_, true); 974 d_form(ADDIS, dst, src, imm.imm_, true);
(...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after
1548 void Assembler::divd(Register dst, Register src1, Register src2, OEBit o, 1559 void Assembler::divd(Register dst, Register src1, Register src2, OEBit o,
1549 RCBit r) { 1560 RCBit r) {
1550 xo_form(EXT2 | DIVD, dst, src1, src2, o, r); 1561 xo_form(EXT2 | DIVD, dst, src1, src2, o, r);
1551 } 1562 }
1552 1563
1553 1564
1554 void Assembler::divdu(Register dst, Register src1, Register src2, OEBit o, 1565 void Assembler::divdu(Register dst, Register src1, Register src2, OEBit o,
1555 RCBit r) { 1566 RCBit r) {
1556 xo_form(EXT2 | DIVDU, dst, src1, src2, o, r); 1567 xo_form(EXT2 | DIVDU, dst, src1, src2, o, r);
1557 } 1568 }
1569
1570 void Assembler::modsd(Register rt, Register ra, Register rb) {
1571 x_form(EXT2 | MODSD, ra, rt, rb, LeaveRC);
1572 }
1573
1574 void Assembler::modud(Register rt, Register ra, Register rb) {
1575 x_form(EXT2 | MODUD, ra, rt, rb, LeaveRC);
1576 }
1558 #endif 1577 #endif
1559 1578
1560 1579
1561 // Function descriptor for AIX. 1580 // Function descriptor for AIX.
1562 // Code address skips the function descriptor "header". 1581 // Code address skips the function descriptor "header".
1563 // TOC and static chain are ignored and set to 0. 1582 // TOC and static chain are ignored and set to 0.
1564 void Assembler::function_descriptor() { 1583 void Assembler::function_descriptor() {
1565 if (ABI_USES_FUNCTION_DESCRIPTORS) { 1584 if (ABI_USES_FUNCTION_DESCRIPTORS) {
1566 Label instructions; 1585 Label instructions;
1567 DCHECK(pc_offset() == 0); 1586 DCHECK(pc_offset() == 0);
(...skipping 980 matching lines...) Expand 10 before | Expand all | Expand 10 after
2548 2567
2549 trampoline_ = Trampoline(pc_offset() - size, tracked_branch_count_); 2568 trampoline_ = Trampoline(pc_offset() - size, tracked_branch_count_);
2550 } 2569 }
2551 } 2570 }
2552 2571
2553 2572
2554 } // namespace internal 2573 } // namespace internal
2555 } // namespace v8 2574 } // namespace v8
2556 2575
2557 #endif // V8_TARGET_ARCH_PPC 2576 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/ppc/assembler-ppc.h ('k') | src/ppc/constants-ppc.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698