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

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

Issue 1779713009: Implement optional turbofan UnalignedLoad and UnalignedStore operators (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Unaligned access simulate using load/shift/or and store/shift/and Created 4 years, 8 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
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 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 1983 matching lines...) Expand 10 before | Expand all | Expand 10 after
1994 if (is_int16(rs.offset_)) { 1994 if (is_int16(rs.offset_)) {
1995 GenInstrImmediate(LWU, rs.rm(), rd, rs.offset_); 1995 GenInstrImmediate(LWU, rs.rm(), rd, rs.offset_);
1996 } else { // Offset > 16 bits, use multiple instructions to load. 1996 } else { // Offset > 16 bits, use multiple instructions to load.
1997 LoadRegPlusOffsetToAt(rs); 1997 LoadRegPlusOffsetToAt(rs);
1998 GenInstrImmediate(LWU, at, rd, 0); // Equiv to lwu(rd, MemOperand(at, 0)); 1998 GenInstrImmediate(LWU, at, rd, 0); // Equiv to lwu(rd, MemOperand(at, 0));
1999 } 1999 }
2000 } 2000 }
2001 2001
2002 2002
2003 void Assembler::lwl(Register rd, const MemOperand& rs) { 2003 void Assembler::lwl(Register rd, const MemOperand& rs) {
2004 DCHECK(is_int16(rs.offset_));
2004 GenInstrImmediate(LWL, rs.rm(), rd, rs.offset_); 2005 GenInstrImmediate(LWL, rs.rm(), rd, rs.offset_);
2005 } 2006 }
2006 2007
2007 2008
2008 void Assembler::lwr(Register rd, const MemOperand& rs) { 2009 void Assembler::lwr(Register rd, const MemOperand& rs) {
2010 DCHECK(is_int16(rs.offset_));
2009 GenInstrImmediate(LWR, rs.rm(), rd, rs.offset_); 2011 GenInstrImmediate(LWR, rs.rm(), rd, rs.offset_);
2010 } 2012 }
2011 2013
2012 2014
2013 void Assembler::sb(Register rd, const MemOperand& rs) { 2015 void Assembler::sb(Register rd, const MemOperand& rs) {
2014 if (is_int16(rs.offset_)) { 2016 if (is_int16(rs.offset_)) {
2015 GenInstrImmediate(SB, rs.rm(), rd, rs.offset_); 2017 GenInstrImmediate(SB, rs.rm(), rd, rs.offset_);
2016 } else { // Offset > 16 bits, use multiple instructions to store. 2018 } else { // Offset > 16 bits, use multiple instructions to store.
2017 LoadRegPlusOffsetToAt(rs); 2019 LoadRegPlusOffsetToAt(rs);
2018 GenInstrImmediate(SB, at, rd, 0); // Equiv to sb(rd, MemOperand(at, 0)); 2020 GenInstrImmediate(SB, at, rd, 0); // Equiv to sb(rd, MemOperand(at, 0));
(...skipping 15 matching lines...) Expand all
2034 if (is_int16(rs.offset_)) { 2036 if (is_int16(rs.offset_)) {
2035 GenInstrImmediate(SW, rs.rm(), rd, rs.offset_); 2037 GenInstrImmediate(SW, rs.rm(), rd, rs.offset_);
2036 } else { // Offset > 16 bits, use multiple instructions to store. 2038 } else { // Offset > 16 bits, use multiple instructions to store.
2037 LoadRegPlusOffsetToAt(rs); 2039 LoadRegPlusOffsetToAt(rs);
2038 GenInstrImmediate(SW, at, rd, 0); // Equiv to sw(rd, MemOperand(at, 0)); 2040 GenInstrImmediate(SW, at, rd, 0); // Equiv to sw(rd, MemOperand(at, 0));
2039 } 2041 }
2040 } 2042 }
2041 2043
2042 2044
2043 void Assembler::swl(Register rd, const MemOperand& rs) { 2045 void Assembler::swl(Register rd, const MemOperand& rs) {
2046 DCHECK(is_int16(rs.offset_));
2044 GenInstrImmediate(SWL, rs.rm(), rd, rs.offset_); 2047 GenInstrImmediate(SWL, rs.rm(), rd, rs.offset_);
2045 } 2048 }
2046 2049
2047 2050
2048 void Assembler::swr(Register rd, const MemOperand& rs) { 2051 void Assembler::swr(Register rd, const MemOperand& rs) {
2052 DCHECK(is_int16(rs.offset_));
2049 GenInstrImmediate(SWR, rs.rm(), rd, rs.offset_); 2053 GenInstrImmediate(SWR, rs.rm(), rd, rs.offset_);
2050 } 2054 }
2051 2055
2052 2056
2053 void Assembler::lui(Register rd, int32_t j) { 2057 void Assembler::lui(Register rd, int32_t j) {
2054 DCHECK(is_uint16(j)); 2058 DCHECK(is_uint16(j));
2055 GenInstrImmediate(LUI, zero_reg, rd, j); 2059 GenInstrImmediate(LUI, zero_reg, rd, j);
2056 } 2060 }
2057 2061
2058 2062
(...skipping 18 matching lines...) Expand all
2077 } 2081 }
2078 2082
2079 2083
2080 void Assembler::dati(Register rs, int32_t j) { 2084 void Assembler::dati(Register rs, int32_t j) {
2081 DCHECK(is_uint16(j)); 2085 DCHECK(is_uint16(j));
2082 GenInstrImmediate(REGIMM, rs, DATI, j); 2086 GenInstrImmediate(REGIMM, rs, DATI, j);
2083 } 2087 }
2084 2088
2085 2089
2086 void Assembler::ldl(Register rd, const MemOperand& rs) { 2090 void Assembler::ldl(Register rd, const MemOperand& rs) {
2091 DCHECK(is_int16(rs.offset_));
2087 GenInstrImmediate(LDL, rs.rm(), rd, rs.offset_); 2092 GenInstrImmediate(LDL, rs.rm(), rd, rs.offset_);
2088 } 2093 }
2089 2094
2090 2095
2091 void Assembler::ldr(Register rd, const MemOperand& rs) { 2096 void Assembler::ldr(Register rd, const MemOperand& rs) {
2097 DCHECK(is_int16(rs.offset_));
2092 GenInstrImmediate(LDR, rs.rm(), rd, rs.offset_); 2098 GenInstrImmediate(LDR, rs.rm(), rd, rs.offset_);
2093 } 2099 }
2094 2100
2095 2101
2096 void Assembler::sdl(Register rd, const MemOperand& rs) { 2102 void Assembler::sdl(Register rd, const MemOperand& rs) {
2103 DCHECK(is_int16(rs.offset_));
2097 GenInstrImmediate(SDL, rs.rm(), rd, rs.offset_); 2104 GenInstrImmediate(SDL, rs.rm(), rd, rs.offset_);
2098 } 2105 }
2099 2106
2100 2107
2101 void Assembler::sdr(Register rd, const MemOperand& rs) { 2108 void Assembler::sdr(Register rd, const MemOperand& rs) {
2109 DCHECK(is_int16(rs.offset_));
2102 GenInstrImmediate(SDR, rs.rm(), rd, rs.offset_); 2110 GenInstrImmediate(SDR, rs.rm(), rd, rs.offset_);
2103 } 2111 }
2104 2112
2105 2113
2106 void Assembler::ld(Register rd, const MemOperand& rs) { 2114 void Assembler::ld(Register rd, const MemOperand& rs) {
2107 if (is_int16(rs.offset_)) { 2115 if (is_int16(rs.offset_)) {
2108 GenInstrImmediate(LD, rs.rm(), rd, rs.offset_); 2116 GenInstrImmediate(LD, rs.rm(), rd, rs.offset_);
2109 } else { // Offset > 16 bits, use multiple instructions to load. 2117 } else { // Offset > 16 bits, use multiple instructions to load.
2110 LoadRegPlusOffsetToAt(rs); 2118 LoadRegPlusOffsetToAt(rs);
2111 GenInstrImmediate(LD, at, rd, 0); // Equiv to lw(rd, MemOperand(at, 0)); 2119 GenInstrImmediate(LD, at, rd, 0); // Equiv to lw(rd, MemOperand(at, 0));
(...skipping 1280 matching lines...) Expand 10 before | Expand all | Expand 10 after
3392 if (icache_flush_mode != SKIP_ICACHE_FLUSH) { 3400 if (icache_flush_mode != SKIP_ICACHE_FLUSH) {
3393 Assembler::FlushICache(isolate, pc, 4 * Assembler::kInstrSize); 3401 Assembler::FlushICache(isolate, pc, 4 * Assembler::kInstrSize);
3394 } 3402 }
3395 } 3403 }
3396 3404
3397 3405
3398 } // namespace internal 3406 } // namespace internal
3399 } // namespace v8 3407 } // namespace v8
3400 3408
3401 #endif // V8_TARGET_ARCH_MIPS64 3409 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698