| 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 | 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 1964 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1975 | 1975 |
| 1976 void Assembler::cvttss2si(Register dst, const Operand& src) { | 1976 void Assembler::cvttss2si(Register dst, const Operand& src) { |
| 1977 EnsureSpace ensure_space(this); | 1977 EnsureSpace ensure_space(this); |
| 1978 EMIT(0xF3); | 1978 EMIT(0xF3); |
| 1979 EMIT(0x0F); | 1979 EMIT(0x0F); |
| 1980 EMIT(0x2C); | 1980 EMIT(0x2C); |
| 1981 emit_operand(dst, src); | 1981 emit_operand(dst, src); |
| 1982 } | 1982 } |
| 1983 | 1983 |
| 1984 | 1984 |
| 1985 void Assembler::cvtss2si(Register dst, const Operand& src) { |
| 1986 EnsureSpace ensure_space(this); |
| 1987 EMIT(0xF3); |
| 1988 EMIT(0x0F); |
| 1989 EMIT(0x2D); |
| 1990 emit_operand(dst, src); |
| 1991 } |
| 1992 |
| 1993 |
| 1985 void Assembler::cvttsd2si(Register dst, const Operand& src) { | 1994 void Assembler::cvttsd2si(Register dst, const Operand& src) { |
| 1986 EnsureSpace ensure_space(this); | 1995 EnsureSpace ensure_space(this); |
| 1987 EMIT(0xF2); | 1996 EMIT(0xF2); |
| 1988 EMIT(0x0F); | 1997 EMIT(0x0F); |
| 1989 EMIT(0x2C); | 1998 EMIT(0x2C); |
| 1990 emit_operand(dst, src); | 1999 emit_operand(dst, src); |
| 1991 } | 2000 } |
| 1992 | 2001 |
| 1993 | 2002 |
| 2003 void Assembler::cvtsd2si(Register dst, const Operand& src) { |
| 2004 EnsureSpace ensure_space(this); |
| 2005 EMIT(0xF2); |
| 2006 EMIT(0x0F); |
| 2007 EMIT(0x2D); |
| 2008 emit_operand(dst, src); |
| 2009 } |
| 2010 |
| 2011 |
| 1994 void Assembler::cvtsd2si(Register dst, XMMRegister src) { | 2012 void Assembler::cvtsd2si(Register dst, XMMRegister src) { |
| 1995 EnsureSpace ensure_space(this); | 2013 EnsureSpace ensure_space(this); |
| 1996 EMIT(0xF2); | 2014 EMIT(0xF2); |
| 1997 EMIT(0x0F); | 2015 EMIT(0x0F); |
| 1998 EMIT(0x2D); | 2016 EMIT(0x2D); |
| 1999 emit_sse_operand(dst, src); | 2017 emit_sse_operand(dst, src); |
| 2000 } | 2018 } |
| 2001 | 2019 |
| 2002 | 2020 |
| 2003 void Assembler::cvtsi2ss(XMMRegister dst, const Operand& src) { | 2021 void Assembler::cvtsi2ss(XMMRegister dst, const Operand& src) { |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2192 EMIT(0x66); | 2210 EMIT(0x66); |
| 2193 EMIT(0x0F); | 2211 EMIT(0x0F); |
| 2194 EMIT(0x3A); | 2212 EMIT(0x3A); |
| 2195 EMIT(0x0B); | 2213 EMIT(0x0B); |
| 2196 emit_sse_operand(dst, src); | 2214 emit_sse_operand(dst, src); |
| 2197 // Mask precision exeption. | 2215 // Mask precision exeption. |
| 2198 EMIT(static_cast<byte>(mode) | 0x8); | 2216 EMIT(static_cast<byte>(mode) | 0x8); |
| 2199 } | 2217 } |
| 2200 | 2218 |
| 2201 | 2219 |
| 2220 void Assembler::ldmxcsr(const Operand& dst) { |
| 2221 EnsureSpace ensure_space(this); |
| 2222 EMIT(0x0F); |
| 2223 EMIT(0xAE); |
| 2224 emit_operand(2, dst); |
| 2225 } |
| 2226 |
| 2227 |
| 2228 void Assembler::stmxcsr(const Operand& dst) { |
| 2229 EnsureSpace ensure_space(this); |
| 2230 EMIT(0x0F); |
| 2231 EMIT(0xAE); |
| 2232 emit_operand(3, dst); |
| 2233 } |
| 2234 |
| 2235 |
| 2202 void Assembler::movmskpd(Register dst, XMMRegister src) { | 2236 void Assembler::movmskpd(Register dst, XMMRegister src) { |
| 2203 EnsureSpace ensure_space(this); | 2237 EnsureSpace ensure_space(this); |
| 2204 EMIT(0x66); | 2238 EMIT(0x66); |
| 2205 EMIT(0x0F); | 2239 EMIT(0x0F); |
| 2206 EMIT(0x50); | 2240 EMIT(0x50); |
| 2207 emit_sse_operand(dst, src); | 2241 emit_sse_operand(dst, src); |
| 2208 } | 2242 } |
| 2209 | 2243 |
| 2210 | 2244 |
| 2211 void Assembler::movmskps(Register dst, XMMRegister src) { | 2245 void Assembler::movmskps(Register dst, XMMRegister src) { |
| (...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2842 emit(x); | 2876 emit(x); |
| 2843 } else { | 2877 } else { |
| 2844 EMIT(0x81); // using a literal 32-bit immediate. | 2878 EMIT(0x81); // using a literal 32-bit immediate. |
| 2845 emit_operand(ireg, dst); | 2879 emit_operand(ireg, dst); |
| 2846 emit(x); | 2880 emit(x); |
| 2847 } | 2881 } |
| 2848 } | 2882 } |
| 2849 | 2883 |
| 2850 | 2884 |
| 2851 void Assembler::emit_operand(Register reg, const Operand& adr) { | 2885 void Assembler::emit_operand(Register reg, const Operand& adr) { |
| 2886 emit_operand(reg.code(), adr); |
| 2887 } |
| 2888 |
| 2889 |
| 2890 void Assembler::emit_operand(int code, const Operand& adr) { |
| 2891 DCHECK(is_uint3(code)); |
| 2852 const unsigned length = adr.len_; | 2892 const unsigned length = adr.len_; |
| 2853 DCHECK(length > 0); | 2893 DCHECK(length > 0); |
| 2854 | 2894 |
| 2855 // Emit updated ModRM byte containing the given register. | 2895 // Emit updated ModRM byte containing the given register. |
| 2856 pc_[0] = (adr.buf_[0] & ~0x38) | (reg.code() << 3); | 2896 pc_[0] = (adr.buf_[0] & ~0x38) | (code << 3); |
| 2857 | 2897 |
| 2858 // Emit the rest of the encoded operand. | 2898 // Emit the rest of the encoded operand. |
| 2859 for (unsigned i = 1; i < length; i++) pc_[i] = adr.buf_[i]; | 2899 for (unsigned i = 1; i < length; i++) pc_[i] = adr.buf_[i]; |
| 2860 pc_ += length; | 2900 pc_ += length; |
| 2861 | 2901 |
| 2862 // Emit relocation information if necessary. | 2902 // Emit relocation information if necessary. |
| 2863 if (length >= sizeof(int32_t) && !RelocInfo::IsNone(adr.rmode_)) { | 2903 if (length >= sizeof(int32_t) && !RelocInfo::IsNone(adr.rmode_)) { |
| 2864 pc_ -= sizeof(int32_t); // pc_ must be *at* disp32 | 2904 pc_ -= sizeof(int32_t); // pc_ must be *at* disp32 |
| 2865 RecordRelocInfo(adr.rmode_); | 2905 RecordRelocInfo(adr.rmode_); |
| 2866 if (adr.rmode_ == RelocInfo::INTERNAL_REFERENCE) { // Fixup for labels | 2906 if (adr.rmode_ == RelocInfo::INTERNAL_REFERENCE) { // Fixup for labels |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2949 fflush(coverage_log); | 2989 fflush(coverage_log); |
| 2950 } | 2990 } |
| 2951 } | 2991 } |
| 2952 | 2992 |
| 2953 #endif | 2993 #endif |
| 2954 | 2994 |
| 2955 } // namespace internal | 2995 } // namespace internal |
| 2956 } // namespace v8 | 2996 } // namespace v8 |
| 2957 | 2997 |
| 2958 #endif // V8_TARGET_ARCH_IA32 | 2998 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |