OLD | NEW |
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 are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // 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 1938 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1949 | 1949 |
1950 | 1950 |
1951 void Assembler::aui(Register rt, Register rs, int32_t j) { | 1951 void Assembler::aui(Register rt, Register rs, int32_t j) { |
1952 // This instruction uses same opcode as 'lui'. The difference in encoding is | 1952 // This instruction uses same opcode as 'lui'. The difference in encoding is |
1953 // 'lui' has zero reg. for rs field. | 1953 // 'lui' has zero reg. for rs field. |
1954 DCHECK(!(rs.is(zero_reg))); | 1954 DCHECK(!(rs.is(zero_reg))); |
1955 DCHECK(is_uint16(j)); | 1955 DCHECK(is_uint16(j)); |
1956 GenInstrImmediate(LUI, rs, rt, j); | 1956 GenInstrImmediate(LUI, rs, rt, j); |
1957 } | 1957 } |
1958 | 1958 |
1959 | |
1960 // ---------PC-Relative instructions----------- | 1959 // ---------PC-Relative instructions----------- |
1961 | 1960 |
1962 void Assembler::addiupc(Register rs, int32_t imm19) { | 1961 void Assembler::addiupc(Register rs, int32_t imm19) { |
1963 DCHECK(IsMipsArchVariant(kMips32r6)); | 1962 DCHECK(IsMipsArchVariant(kMips32r6)); |
1964 DCHECK(rs.is_valid() && is_int19(imm19)); | 1963 DCHECK(rs.is_valid() && is_int19(imm19)); |
1965 uint32_t imm21 = ADDIUPC << kImm19Bits | (imm19 & kImm19Mask); | 1964 uint32_t imm21 = ADDIUPC << kImm19Bits | (imm19 & kImm19Mask); |
1966 GenInstrImmediate(PCREL, rs, imm21); | 1965 GenInstrImmediate(PCREL, rs, imm21); |
1967 } | 1966 } |
1968 | 1967 |
1969 | 1968 |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2184 } | 2183 } |
2185 | 2184 |
2186 | 2185 |
2187 void Assembler::align(Register rd, Register rs, Register rt, uint8_t bp) { | 2186 void Assembler::align(Register rd, Register rs, Register rt, uint8_t bp) { |
2188 DCHECK(IsMipsArchVariant(kMips32r6)); | 2187 DCHECK(IsMipsArchVariant(kMips32r6)); |
2189 DCHECK(is_uint3(bp)); | 2188 DCHECK(is_uint3(bp)); |
2190 uint16_t sa = (ALIGN << kBp2Bits) | bp; | 2189 uint16_t sa = (ALIGN << kBp2Bits) | bp; |
2191 GenInstrRegister(SPECIAL3, rs, rt, rd, sa, BSHFL); | 2190 GenInstrRegister(SPECIAL3, rs, rt, rd, sa, BSHFL); |
2192 } | 2191 } |
2193 | 2192 |
| 2193 // Byte swap. |
| 2194 void Assembler::wsbh(Register rd, Register rt) { |
| 2195 DCHECK(IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)); |
| 2196 GenInstrRegister(SPECIAL3, zero_reg, rt, rd, WSBH, BSHFL); |
| 2197 } |
| 2198 |
| 2199 void Assembler::seh(Register rd, Register rt) { |
| 2200 DCHECK(IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)); |
| 2201 GenInstrRegister(SPECIAL3, zero_reg, rt, rd, SEH, BSHFL); |
| 2202 } |
| 2203 |
| 2204 void Assembler::seb(Register rd, Register rt) { |
| 2205 DCHECK(IsMipsArchVariant(kMips32r2) || IsMipsArchVariant(kMips32r6)); |
| 2206 GenInstrRegister(SPECIAL3, zero_reg, rt, rd, SEB, BSHFL); |
| 2207 } |
2194 | 2208 |
2195 // --------Coprocessor-instructions---------------- | 2209 // --------Coprocessor-instructions---------------- |
2196 | 2210 |
2197 // Load, store, move. | 2211 // Load, store, move. |
2198 void Assembler::lwc1(FPURegister fd, const MemOperand& src) { | 2212 void Assembler::lwc1(FPURegister fd, const MemOperand& src) { |
2199 if (is_int16(src.offset_)) { | 2213 if (is_int16(src.offset_)) { |
2200 GenInstrImmediate(LWC1, src.rm(), fd, src.offset_); | 2214 GenInstrImmediate(LWC1, src.rm(), fd, src.offset_); |
2201 } else { // Offset > 16 bits, use multiple instructions to load. | 2215 } else { // Offset > 16 bits, use multiple instructions to load. |
2202 LoadRegPlusOffsetToAt(src); | 2216 LoadRegPlusOffsetToAt(src); |
2203 GenInstrImmediate(LWC1, at, fd, 0); | 2217 GenInstrImmediate(LWC1, at, fd, 0); |
(...skipping 1017 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3221 | 3235 |
3222 if (icache_flush_mode != SKIP_ICACHE_FLUSH) { | 3236 if (icache_flush_mode != SKIP_ICACHE_FLUSH) { |
3223 Assembler::FlushICache(isolate, pc, 2 * sizeof(int32_t)); | 3237 Assembler::FlushICache(isolate, pc, 2 * sizeof(int32_t)); |
3224 } | 3238 } |
3225 } | 3239 } |
3226 | 3240 |
3227 } // namespace internal | 3241 } // namespace internal |
3228 } // namespace v8 | 3242 } // namespace v8 |
3229 | 3243 |
3230 #endif // V8_TARGET_ARCH_MIPS | 3244 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |