OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 ASSERT(and_then == kFallThroughAtEnd); | 122 ASSERT(and_then == kFallThroughAtEnd); |
123 bind(&done); | 123 bind(&done); |
124 } | 124 } |
125 } | 125 } |
126 | 126 |
127 | 127 |
128 void MacroAssembler::ClampDoubleToUint8(XMMRegister input_reg, | 128 void MacroAssembler::ClampDoubleToUint8(XMMRegister input_reg, |
129 XMMRegister scratch_reg, | 129 XMMRegister scratch_reg, |
130 Register result_reg) { | 130 Register result_reg) { |
131 Label done; | 131 Label done; |
132 ExternalReference zero_ref = ExternalReference::address_of_zero(); | 132 Label conv_failure; |
133 movdbl(scratch_reg, Operand::StaticVariable(zero_ref)); | 133 pxor(scratch_reg, scratch_reg); |
| 134 cvtsd2si(result_reg, input_reg); |
| 135 test(result_reg, Immediate(0xFFFFFF00)); |
| 136 j(zero, &done, Label::kNear); |
| 137 cmp(result_reg, Immediate(0x80000000)); |
| 138 j(equal, &conv_failure, Label::kNear); |
| 139 mov(result_reg, Immediate(0)); |
| 140 setcc(above, result_reg); |
| 141 sub(result_reg, Immediate(1)); |
| 142 and_(result_reg, Immediate(255)); |
| 143 jmp(&done, Label::kNear); |
| 144 bind(&conv_failure); |
134 Set(result_reg, Immediate(0)); | 145 Set(result_reg, Immediate(0)); |
135 ucomisd(input_reg, scratch_reg); | 146 ucomisd(input_reg, scratch_reg); |
136 j(below, &done, Label::kNear); | 147 j(below, &done, Label::kNear); |
137 cvtsd2si(result_reg, input_reg); | |
138 test(result_reg, Immediate(0xFFFFFF00)); | |
139 j(zero, &done, Label::kNear); | |
140 Set(result_reg, Immediate(255)); | 148 Set(result_reg, Immediate(255)); |
141 bind(&done); | 149 bind(&done); |
142 } | 150 } |
143 | 151 |
144 | 152 |
145 void MacroAssembler::ClampUint8(Register reg) { | 153 void MacroAssembler::ClampUint8(Register reg) { |
146 Label done; | 154 Label done; |
147 test(reg, Immediate(0xFFFFFF00)); | 155 test(reg, Immediate(0xFFFFFF00)); |
148 j(zero, &done, Label::kNear); | 156 j(zero, &done, Label::kNear); |
149 setcc(negative, reg); // 1 if negative, 0 if positive. | 157 setcc(negative, reg); // 1 if negative, 0 if positive. |
(...skipping 2819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2969 j(not_equal, call_runtime); | 2977 j(not_equal, call_runtime); |
2970 | 2978 |
2971 mov(ecx, FieldOperand(ebx, Map::kPrototypeOffset)); | 2979 mov(ecx, FieldOperand(ebx, Map::kPrototypeOffset)); |
2972 cmp(ecx, isolate()->factory()->null_value()); | 2980 cmp(ecx, isolate()->factory()->null_value()); |
2973 j(not_equal, &next); | 2981 j(not_equal, &next); |
2974 } | 2982 } |
2975 | 2983 |
2976 } } // namespace v8::internal | 2984 } } // namespace v8::internal |
2977 | 2985 |
2978 #endif // V8_TARGET_ARCH_IA32 | 2986 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |