| OLD | NEW | 
|     1 // Copyright 2011 the V8 project authors. All rights reserved. |     1 // Copyright 2011 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 1921 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1932     bind(&fail); |  1932     bind(&fail); | 
|  1933     Abort("Global functions must have initial map"); |  1933     Abort("Global functions must have initial map"); | 
|  1934     bind(&ok); |  1934     bind(&ok); | 
|  1935   } |  1935   } | 
|  1936 } |  1936 } | 
|  1937  |  1937  | 
|  1938  |  1938  | 
|  1939 void MacroAssembler::JumpIfNotBothSmi(Register reg1, |  1939 void MacroAssembler::JumpIfNotBothSmi(Register reg1, | 
|  1940                                       Register reg2, |  1940                                       Register reg2, | 
|  1941                                       Label* on_not_both_smi) { |  1941                                       Label* on_not_both_smi) { | 
|  1942   ASSERT_EQ(0, kSmiTag); |  1942   STATIC_ASSERT(kSmiTag == 0); | 
|  1943   tst(reg1, Operand(kSmiTagMask)); |  1943   tst(reg1, Operand(kSmiTagMask)); | 
|  1944   tst(reg2, Operand(kSmiTagMask), eq); |  1944   tst(reg2, Operand(kSmiTagMask), eq); | 
|  1945   b(ne, on_not_both_smi); |  1945   b(ne, on_not_both_smi); | 
|  1946 } |  1946 } | 
|  1947  |  1947  | 
|  1948  |  1948  | 
|  1949 void MacroAssembler::JumpIfEitherSmi(Register reg1, |  1949 void MacroAssembler::JumpIfEitherSmi(Register reg1, | 
|  1950                                      Register reg2, |  1950                                      Register reg2, | 
|  1951                                      Label* on_either_smi) { |  1951                                      Label* on_either_smi) { | 
|  1952   ASSERT_EQ(0, kSmiTag); |  1952   STATIC_ASSERT(kSmiTag == 0); | 
|  1953   tst(reg1, Operand(kSmiTagMask)); |  1953   tst(reg1, Operand(kSmiTagMask)); | 
|  1954   tst(reg2, Operand(kSmiTagMask), ne); |  1954   tst(reg2, Operand(kSmiTagMask), ne); | 
|  1955   b(eq, on_either_smi); |  1955   b(eq, on_either_smi); | 
|  1956 } |  1956 } | 
|  1957  |  1957  | 
|  1958  |  1958  | 
|  1959 void MacroAssembler::AbortIfSmi(Register object) { |  1959 void MacroAssembler::AbortIfSmi(Register object) { | 
|  1960   ASSERT_EQ(0, kSmiTag); |  1960   STATIC_ASSERT(kSmiTag == 0); | 
|  1961   tst(object, Operand(kSmiTagMask)); |  1961   tst(object, Operand(kSmiTagMask)); | 
|  1962   Assert(ne, "Operand is a smi"); |  1962   Assert(ne, "Operand is a smi"); | 
|  1963 } |  1963 } | 
|  1964  |  1964  | 
|  1965  |  1965  | 
|  1966 void MacroAssembler::AbortIfNotSmi(Register object) { |  1966 void MacroAssembler::AbortIfNotSmi(Register object) { | 
|  1967   ASSERT_EQ(0, kSmiTag); |  1967   STATIC_ASSERT(kSmiTag == 0); | 
|  1968   tst(object, Operand(kSmiTagMask)); |  1968   tst(object, Operand(kSmiTagMask)); | 
|  1969   Assert(eq, "Operand is not smi"); |  1969   Assert(eq, "Operand is not smi"); | 
|  1970 } |  1970 } | 
|  1971  |  1971  | 
|  1972  |  1972  | 
 |  1973 void MacroAssembler::JumpIfNotHeapNumber(Register object, | 
 |  1974                                          Register heap_number_map, | 
 |  1975                                          Register scratch, | 
 |  1976                                          Label* on_not_heap_number) { | 
 |  1977   ldr(scratch, FieldMemOperand(object, HeapObject::kMapOffset)); | 
 |  1978   AssertRegisterIsRoot(heap_number_map, Heap::kHeapNumberMapRootIndex); | 
 |  1979   cmp(scratch, heap_number_map); | 
 |  1980   b(ne, on_not_heap_number); | 
 |  1981 } | 
 |  1982  | 
 |  1983  | 
|  1973 void MacroAssembler::JumpIfNonSmisNotBothSequentialAsciiStrings( |  1984 void MacroAssembler::JumpIfNonSmisNotBothSequentialAsciiStrings( | 
|  1974     Register first, |  1985     Register first, | 
|  1975     Register second, |  1986     Register second, | 
|  1976     Register scratch1, |  1987     Register scratch1, | 
|  1977     Register scratch2, |  1988     Register scratch2, | 
|  1978     Label* failure) { |  1989     Label* failure) { | 
|  1979   // Test that both first and second are sequential ASCII strings. |  1990   // Test that both first and second are sequential ASCII strings. | 
|  1980   // Assume that they are non-smis. |  1991   // Assume that they are non-smis. | 
|  1981   ldr(scratch1, FieldMemOperand(first, HeapObject::kMapOffset)); |  1992   ldr(scratch1, FieldMemOperand(first, HeapObject::kMapOffset)); | 
|  1982   ldr(scratch2, FieldMemOperand(second, HeapObject::kMapOffset)); |  1993   ldr(scratch2, FieldMemOperand(second, HeapObject::kMapOffset)); | 
|  1983   ldrb(scratch1, FieldMemOperand(scratch1, Map::kInstanceTypeOffset)); |  1994   ldrb(scratch1, FieldMemOperand(scratch1, Map::kInstanceTypeOffset)); | 
|  1984   ldrb(scratch2, FieldMemOperand(scratch2, Map::kInstanceTypeOffset)); |  1995   ldrb(scratch2, FieldMemOperand(scratch2, Map::kInstanceTypeOffset)); | 
|  1985  |  1996  | 
|  1986   JumpIfBothInstanceTypesAreNotSequentialAscii(scratch1, |  1997   JumpIfBothInstanceTypesAreNotSequentialAscii(scratch1, | 
|  1987                                                scratch2, |  1998                                                scratch2, | 
|  1988                                                scratch1, |  1999                                                scratch1, | 
|  1989                                                scratch2, |  2000                                                scratch2, | 
|  1990                                                failure); |  2001                                                failure); | 
|  1991 } |  2002 } | 
|  1992  |  2003  | 
|  1993 void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(Register first, |  2004 void MacroAssembler::JumpIfNotBothSequentialAsciiStrings(Register first, | 
|  1994                                                          Register second, |  2005                                                          Register second, | 
|  1995                                                          Register scratch1, |  2006                                                          Register scratch1, | 
|  1996                                                          Register scratch2, |  2007                                                          Register scratch2, | 
|  1997                                                          Label* failure) { |  2008                                                          Label* failure) { | 
|  1998   // Check that neither is a smi. |  2009   // Check that neither is a smi. | 
|  1999   ASSERT_EQ(0, kSmiTag); |  2010   STATIC_ASSERT(kSmiTag == 0); | 
|  2000   and_(scratch1, first, Operand(second)); |  2011   and_(scratch1, first, Operand(second)); | 
|  2001   tst(scratch1, Operand(kSmiTagMask)); |  2012   tst(scratch1, Operand(kSmiTagMask)); | 
|  2002   b(eq, failure); |  2013   b(eq, failure); | 
|  2003   JumpIfNonSmisNotBothSequentialAsciiStrings(first, |  2014   JumpIfNonSmisNotBothSequentialAsciiStrings(first, | 
|  2004                                              second, |  2015                                              second, | 
|  2005                                              scratch1, |  2016                                              scratch1, | 
|  2006                                              scratch2, |  2017                                              scratch2, | 
|  2007                                              failure); |  2018                                              failure); | 
|  2008 } |  2019 } | 
|  2009  |  2020  | 
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2245  |  2256  | 
|  2246 void CodePatcher::Emit(Address addr) { |  2257 void CodePatcher::Emit(Address addr) { | 
|  2247   masm()->emit(reinterpret_cast<Instr>(addr)); |  2258   masm()->emit(reinterpret_cast<Instr>(addr)); | 
|  2248 } |  2259 } | 
|  2249 #endif  // ENABLE_DEBUGGER_SUPPORT |  2260 #endif  // ENABLE_DEBUGGER_SUPPORT | 
|  2250  |  2261  | 
|  2251  |  2262  | 
|  2252 } }  // namespace v8::internal |  2263 } }  // namespace v8::internal | 
|  2253  |  2264  | 
|  2254 #endif  // V8_TARGET_ARCH_ARM |  2265 #endif  // V8_TARGET_ARCH_ARM | 
| OLD | NEW |