Home | History | Annotate | Download | only in mips
      1 // Copyright 2011 the V8 project authors. All rights reserved.
      2 // Redistribution and use in source and binary forms, with or without
      3 // modification, are permitted provided that the following conditions are
      4 // met:
      5 //
      6 //     * Redistributions of source code must retain the above copyright
      7 //       notice, this list of conditions and the following disclaimer.
      8 //     * Redistributions in binary form must reproduce the above
      9 //       copyright notice, this list of conditions and the following
     10 //       disclaimer in the documentation and/or other materials provided
     11 //       with the distribution.
     12 //     * Neither the name of Google Inc. nor the names of its
     13 //       contributors may be used to endorse or promote products derived
     14 //       from this software without specific prior written permission.
     15 //
     16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 
     28 #include "v8.h"
     29 
     30 #if defined(V8_TARGET_ARCH_MIPS)
     31 
     32 #include "bootstrapper.h"
     33 #include "code-stubs.h"
     34 #include "codegen-inl.h"
     35 #include "regexp-macro-assembler.h"
     36 
     37 namespace v8 {
     38 namespace internal {
     39 
     40 
     41 #define __ ACCESS_MASM(masm)
     42 
     43 
     44 void ToNumberStub::Generate(MacroAssembler* masm) {
     45   UNIMPLEMENTED_MIPS();
     46 }
     47 
     48 
     49 void FastNewClosureStub::Generate(MacroAssembler* masm) {
     50   UNIMPLEMENTED_MIPS();
     51 }
     52 
     53 
     54 void FastNewContextStub::Generate(MacroAssembler* masm) {
     55   UNIMPLEMENTED_MIPS();
     56 }
     57 
     58 
     59 void FastCloneShallowArrayStub::Generate(MacroAssembler* masm) {
     60   UNIMPLEMENTED_MIPS();
     61 }
     62 
     63 
     64 // Takes a Smi and converts to an IEEE 64 bit floating point value in two
     65 // registers.  The format is 1 sign bit, 11 exponent bits (biased 1023) and
     66 // 52 fraction bits (20 in the first word, 32 in the second).  Zeros is a
     67 // scratch register.  Destroys the source register.  No GC occurs during this
     68 // stub so you don't have to set up the frame.
     69 class ConvertToDoubleStub : public CodeStub {
     70  public:
     71   ConvertToDoubleStub(Register result_reg_1,
     72                       Register result_reg_2,
     73                       Register source_reg,
     74                       Register scratch_reg)
     75       : result1_(result_reg_1),
     76         result2_(result_reg_2),
     77         source_(source_reg),
     78         zeros_(scratch_reg) { }
     79 
     80  private:
     81   Register result1_;
     82   Register result2_;
     83   Register source_;
     84   Register zeros_;
     85 
     86   // Minor key encoding in 16 bits.
     87   class ModeBits: public BitField<OverwriteMode, 0, 2> {};
     88   class OpBits: public BitField<Token::Value, 2, 14> {};
     89 
     90   Major MajorKey() { return ConvertToDouble; }
     91   int MinorKey() {
     92     // Encode the parameters in a unique 16 bit value.
     93     return  result1_.code() +
     94            (result2_.code() << 4) +
     95            (source_.code() << 8) +
     96            (zeros_.code() << 12);
     97   }
     98 
     99   void Generate(MacroAssembler* masm);
    100 
    101   const char* GetName() { return "ConvertToDoubleStub"; }
    102 
    103 #ifdef DEBUG
    104   void Print() { PrintF("ConvertToDoubleStub\n"); }
    105 #endif
    106 };
    107 
    108 
    109 void ConvertToDoubleStub::Generate(MacroAssembler* masm) {
    110   UNIMPLEMENTED_MIPS();
    111 }
    112 
    113 
    114 class FloatingPointHelper : public AllStatic {
    115  public:
    116 
    117   enum Destination {
    118     kFPURegisters,
    119     kCoreRegisters
    120   };
    121 
    122 
    123   // Loads smis from a0 and a1 (right and left in binary operations) into
    124   // floating point registers. Depending on the destination the values ends up
    125   // either f14 and f12 or in a2/a3 and a0/a1 respectively. If the destination
    126   // is floating point registers FPU must be supported. If core registers are
    127   // requested when FPU is supported f12 and f14 will be scratched.
    128   static void LoadSmis(MacroAssembler* masm,
    129                        Destination destination,
    130                        Register scratch1,
    131                        Register scratch2);
    132 
    133   // Loads objects from a0 and a1 (right and left in binary operations) into
    134   // floating point registers. Depending on the destination the values ends up
    135   // either f14 and f12 or in a2/a3 and a0/a1 respectively. If the destination
    136   // is floating point registers FPU must be supported. If core registers are
    137   // requested when FPU is supported f12 and f14 will still be scratched. If
    138   // either a0 or a1 is not a number (not smi and not heap number object) the
    139   // not_number label is jumped to with a0 and a1 intact.
    140   static void LoadOperands(MacroAssembler* masm,
    141                            FloatingPointHelper::Destination destination,
    142                            Register heap_number_map,
    143                            Register scratch1,
    144                            Register scratch2,
    145                            Label* not_number);
    146   // Loads the number from object into dst as a 32-bit integer if possible. If
    147   // the object is not a 32-bit integer control continues at the label
    148   // not_int32. If FPU is supported double_scratch is used but not scratch2.
    149   static void LoadNumberAsInteger(MacroAssembler* masm,
    150                                   Register object,
    151                                   Register dst,
    152                                   Register heap_number_map,
    153                                   Register scratch1,
    154                                   Register scratch2,
    155                                   FPURegister double_scratch,
    156                                   Label* not_int32);
    157  private:
    158   static void LoadNumber(MacroAssembler* masm,
    159                          FloatingPointHelper::Destination destination,
    160                          Register object,
    161                          FPURegister dst,
    162                          Register dst1,
    163                          Register dst2,
    164                          Register heap_number_map,
    165                          Register scratch1,
    166                          Register scratch2,
    167                          Label* not_number);
    168 };
    169 
    170 
    171 void FloatingPointHelper::LoadSmis(MacroAssembler* masm,
    172                                    FloatingPointHelper::Destination destination,
    173                                    Register scratch1,
    174                                    Register scratch2) {
    175   UNIMPLEMENTED_MIPS();
    176 }
    177 
    178 
    179 void FloatingPointHelper::LoadOperands(
    180     MacroAssembler* masm,
    181     FloatingPointHelper::Destination destination,
    182     Register heap_number_map,
    183     Register scratch1,
    184     Register scratch2,
    185     Label* slow) {
    186   UNIMPLEMENTED_MIPS();
    187 }
    188 
    189 
    190 void FloatingPointHelper::LoadNumber(MacroAssembler* masm,
    191                                      Destination destination,
    192                                      Register object,
    193                                      FPURegister dst,
    194                                      Register dst1,
    195                                      Register dst2,
    196                                      Register heap_number_map,
    197                                      Register scratch1,
    198                                      Register scratch2,
    199                                      Label* not_number) {
    200   UNIMPLEMENTED_MIPS();
    201 }
    202 
    203 
    204 void FloatingPointHelper::LoadNumberAsInteger(MacroAssembler* masm,
    205                                               Register object,
    206                                               Register dst,
    207                                               Register heap_number_map,
    208                                               Register scratch1,
    209                                               Register scratch2,
    210                                               FPURegister double_scratch,
    211                                               Label* not_int32) {
    212   UNIMPLEMENTED_MIPS();
    213 }
    214 
    215 
    216 // See comment for class, this does NOT work for int32's that are in Smi range.
    217 void WriteInt32ToHeapNumberStub::Generate(MacroAssembler* masm) {
    218   UNIMPLEMENTED_MIPS();
    219 }
    220 
    221 
    222 void EmitNanCheck(MacroAssembler* masm, Condition cc) {
    223   UNIMPLEMENTED_MIPS();
    224 }
    225 
    226 
    227 void NumberToStringStub::GenerateLookupNumberStringCache(MacroAssembler* masm,
    228                                                          Register object,
    229                                                          Register result,
    230                                                          Register scratch1,
    231                                                          Register scratch2,
    232                                                          Register scratch3,
    233                                                          bool object_is_smi,
    234                                                          Label* not_found) {
    235   UNIMPLEMENTED_MIPS();
    236 }
    237 
    238 
    239 void NumberToStringStub::Generate(MacroAssembler* masm) {
    240   UNIMPLEMENTED_MIPS();
    241 }
    242 
    243 
    244 // On entry lhs_ (lhs) and rhs_ (rhs) are the things to be compared.
    245 // On exit, v0 is 0, positive, or negative (smi) to indicate the result
    246 // of the comparison.
    247 void CompareStub::Generate(MacroAssembler* masm) {
    248   UNIMPLEMENTED_MIPS();
    249 }
    250 
    251 
    252 // This stub does not handle the inlined cases (Smis, Booleans, undefined).
    253 // The stub returns zero for false, and a non-zero value for true.
    254 void ToBooleanStub::Generate(MacroAssembler* masm) {
    255   UNIMPLEMENTED_MIPS();
    256 }
    257 
    258 
    259 // We fall into this code if the operands were Smis, but the result was
    260 // not (eg. overflow).  We branch into this code (to the not_smi label) if
    261 // the operands were not both Smi.  The operands are in lhs and rhs.
    262 // To call the C-implemented binary fp operation routines we need to end up
    263 // with the double precision floating point operands in a0 and a1 (for the
    264 // value in a1) and a2 and a3 (for the value in a0).
    265 void GenericBinaryOpStub::HandleBinaryOpSlowCases(MacroAssembler* masm,
    266                                     Label* not_smi,
    267                                     Register lhs,
    268                                     Register rhs,
    269                                     const Builtins::JavaScript& builtin) {
    270   UNIMPLEMENTED_MIPS();
    271 }
    272 
    273 
    274 // For bitwise ops where the inputs are not both Smis we here try to determine
    275 // whether both inputs are either Smis or at least heap numbers that can be
    276 // represented by a 32 bit signed value.  We truncate towards zero as required
    277 // by the ES spec.  If this is the case we do the bitwise op and see if the
    278 // result is a Smi.  If so, great, otherwise we try to find a heap number to
    279 // write the answer into (either by allocating or by overwriting).
    280 // On entry the operands are in lhs (x) and rhs (y). (Result = x op y).
    281 // On exit the result is in v0.
    282 void GenericBinaryOpStub::HandleNonSmiBitwiseOp(MacroAssembler* masm,
    283                                                 Register lhs,
    284                                                 Register rhs) {
    285   UNIMPLEMENTED_MIPS();
    286 }
    287 
    288 
    289 void GenericBinaryOpStub::Generate(MacroAssembler* masm) {
    290   UNIMPLEMENTED_MIPS();
    291 }
    292 
    293 
    294 void GenericBinaryOpStub::GenerateTypeTransition(MacroAssembler* masm) {
    295   UNIMPLEMENTED_MIPS();
    296 }
    297 
    298 
    299 Handle<Code> GetBinaryOpStub(int key, BinaryOpIC::TypeInfo type_info) {
    300   GenericBinaryOpStub stub(key, type_info);
    301   return stub.GetCode();
    302 }
    303 
    304 
    305 Handle<Code> GetTypeRecordingBinaryOpStub(int key,
    306     TRBinaryOpIC::TypeInfo type_info,
    307     TRBinaryOpIC::TypeInfo result_type_info) {
    308   TypeRecordingBinaryOpStub stub(key, type_info, result_type_info);
    309   return stub.GetCode();
    310 }
    311 
    312 
    313 void TypeRecordingBinaryOpStub::GenerateTypeTransition(MacroAssembler* masm) {
    314   UNIMPLEMENTED_MIPS();
    315 }
    316 
    317 
    318 void TypeRecordingBinaryOpStub::GenerateTypeTransitionWithSavedArgs(
    319     MacroAssembler* masm) {
    320   UNIMPLEMENTED();
    321 }
    322 
    323 
    324 void TypeRecordingBinaryOpStub::Generate(MacroAssembler* masm) {
    325   UNIMPLEMENTED_MIPS();
    326 }
    327 
    328 
    329 const char* TypeRecordingBinaryOpStub::GetName() {
    330   UNIMPLEMENTED_MIPS();
    331   return name_;
    332 }
    333 
    334 
    335 
    336 void TypeRecordingBinaryOpStub::GenerateSmiSmiOperation(
    337     MacroAssembler* masm) {
    338   UNIMPLEMENTED_MIPS();
    339 }
    340 
    341 
    342 void TypeRecordingBinaryOpStub::GenerateFPOperation(MacroAssembler* masm,
    343                                                     bool smi_operands,
    344                                                     Label* not_numbers,
    345                                                     Label* gc_required) {
    346   UNIMPLEMENTED_MIPS();
    347 }
    348 
    349 
    350 // Generate the smi code. If the operation on smis are successful this return is
    351 // generated. If the result is not a smi and heap number allocation is not
    352 // requested the code falls through. If number allocation is requested but a
    353 // heap number cannot be allocated the code jumps to the lable gc_required.
    354 void TypeRecordingBinaryOpStub::GenerateSmiCode(MacroAssembler* masm,
    355     Label* gc_required,
    356     SmiCodeGenerateHeapNumberResults allow_heapnumber_results) {
    357   UNIMPLEMENTED_MIPS();
    358 }
    359 
    360 
    361 void TypeRecordingBinaryOpStub::GenerateSmiStub(MacroAssembler* masm) {
    362   UNIMPLEMENTED_MIPS();
    363 }
    364 
    365 
    366 void TypeRecordingBinaryOpStub::GenerateStringStub(MacroAssembler* masm) {
    367   UNIMPLEMENTED_MIPS();
    368 }
    369 
    370 
    371 void TypeRecordingBinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) {
    372   UNIMPLEMENTED_MIPS();
    373 }
    374 
    375 
    376 void TypeRecordingBinaryOpStub::GenerateHeapNumberStub(MacroAssembler* masm) {
    377   UNIMPLEMENTED_MIPS();
    378 }
    379 
    380 
    381 void TypeRecordingBinaryOpStub::GenerateGeneric(MacroAssembler* masm) {
    382   UNIMPLEMENTED_MIPS();
    383 }
    384 
    385 
    386 void TypeRecordingBinaryOpStub::GenerateAddStrings(MacroAssembler* masm) {
    387   UNIMPLEMENTED_MIPS();
    388 }
    389 
    390 
    391 void TypeRecordingBinaryOpStub::GenerateCallRuntime(MacroAssembler* masm) {
    392   UNIMPLEMENTED_MIPS();
    393 }
    394 
    395 
    396 void TypeRecordingBinaryOpStub::GenerateHeapResultAllocation(
    397     MacroAssembler* masm,
    398     Register result,
    399     Register heap_number_map,
    400     Register scratch1,
    401     Register scratch2,
    402     Label* gc_required) {
    403   UNIMPLEMENTED_MIPS();
    404 }
    405 
    406 
    407 void TypeRecordingBinaryOpStub::GenerateRegisterArgsPush(MacroAssembler* masm) {
    408   UNIMPLEMENTED_MIPS();
    409 }
    410 
    411 
    412 
    413 void TranscendentalCacheStub::Generate(MacroAssembler* masm) {
    414   UNIMPLEMENTED_MIPS();
    415 }
    416 
    417 
    418 Runtime::FunctionId TranscendentalCacheStub::RuntimeFunction() {
    419   UNIMPLEMENTED_MIPS();
    420   return Runtime::kAbort;
    421 }
    422 
    423 
    424 void StackCheckStub::Generate(MacroAssembler* masm) {
    425   UNIMPLEMENTED_MIPS();
    426 }
    427 
    428 
    429 void GenericUnaryOpStub::Generate(MacroAssembler* masm) {
    430   UNIMPLEMENTED_MIPS();
    431 }
    432 
    433 
    434 bool CEntryStub::NeedsImmovableCode() {
    435   return true;
    436 }
    437 
    438 
    439 void CEntryStub::GenerateThrowTOS(MacroAssembler* masm) {
    440   UNIMPLEMENTED_MIPS();
    441 }
    442 
    443 
    444 void CEntryStub::GenerateThrowUncatchable(MacroAssembler* masm,
    445                                           UncatchableExceptionType type) {
    446   UNIMPLEMENTED_MIPS();
    447 }
    448 
    449 
    450 void CEntryStub::GenerateCore(MacroAssembler* masm,
    451                               Label* throw_normal_exception,
    452                               Label* throw_termination_exception,
    453                               Label* throw_out_of_memory_exception,
    454                               bool do_gc,
    455                               bool always_allocate) {
    456   UNIMPLEMENTED_MIPS();
    457 }
    458 
    459 
    460 void CEntryStub::Generate(MacroAssembler* masm) {
    461   UNIMPLEMENTED_MIPS();
    462 }
    463 
    464 
    465 void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
    466   UNIMPLEMENTED_MIPS();
    467 }
    468 
    469 
    470 // Uses registers a0 to t0. Expected input is
    471 // object in a0 (or at sp+1*kPointerSize) and function in
    472 // a1 (or at sp), depending on whether or not
    473 // args_in_registers() is true.
    474 void InstanceofStub::Generate(MacroAssembler* masm) {
    475   UNIMPLEMENTED_MIPS();
    476 }
    477 
    478 
    479 void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) {
    480   UNIMPLEMENTED_MIPS();
    481 }
    482 
    483 
    484 void ArgumentsAccessStub::GenerateNewObject(MacroAssembler* masm) {
    485   UNIMPLEMENTED_MIPS();
    486 }
    487 
    488 
    489 void RegExpExecStub::Generate(MacroAssembler* masm) {
    490   UNIMPLEMENTED_MIPS();
    491 }
    492 
    493 
    494 void RegExpConstructResultStub::Generate(MacroAssembler* masm) {
    495   UNIMPLEMENTED_MIPS();
    496 }
    497 
    498 
    499 void CallFunctionStub::Generate(MacroAssembler* masm) {
    500   UNIMPLEMENTED_MIPS();
    501 }
    502 
    503 
    504 // Unfortunately you have to run without snapshots to see most of these
    505 // names in the profile since most compare stubs end up in the snapshot.
    506 const char* CompareStub::GetName() {
    507   UNIMPLEMENTED_MIPS();
    508   return name_;
    509 }
    510 
    511 
    512 int CompareStub::MinorKey() {
    513   UNIMPLEMENTED_MIPS();
    514   return 0;
    515 }
    516 
    517 
    518 // StringCharCodeAtGenerator
    519 
    520 void StringCharCodeAtGenerator::GenerateFast(MacroAssembler* masm) {
    521   UNIMPLEMENTED_MIPS();
    522 }
    523 
    524 
    525 void StringCharCodeAtGenerator::GenerateSlow(
    526     MacroAssembler* masm, const RuntimeCallHelper& call_helper) {
    527   UNIMPLEMENTED_MIPS();
    528 }
    529 
    530 
    531 // -------------------------------------------------------------------------
    532 // StringCharFromCodeGenerator
    533 
    534 void StringCharFromCodeGenerator::GenerateFast(MacroAssembler* masm) {
    535   UNIMPLEMENTED_MIPS();
    536 }
    537 
    538 
    539 void StringCharFromCodeGenerator::GenerateSlow(
    540     MacroAssembler* masm, const RuntimeCallHelper& call_helper) {
    541   UNIMPLEMENTED_MIPS();
    542 }
    543 
    544 
    545 // -------------------------------------------------------------------------
    546 // StringCharAtGenerator
    547 
    548 void StringCharAtGenerator::GenerateFast(MacroAssembler* masm) {
    549   UNIMPLEMENTED_MIPS();
    550 }
    551 
    552 
    553 void StringCharAtGenerator::GenerateSlow(
    554     MacroAssembler* masm, const RuntimeCallHelper& call_helper) {
    555   UNIMPLEMENTED_MIPS();
    556 }
    557 
    558 
    559 class StringHelper : public AllStatic {
    560  public:
    561   // Generate code for copying characters using a simple loop. This should only
    562   // be used in places where the number of characters is small and the
    563   // additional setup and checking in GenerateCopyCharactersLong adds too much
    564   // overhead. Copying of overlapping regions is not supported.
    565   // Dest register ends at the position after the last character written.
    566   static void GenerateCopyCharacters(MacroAssembler* masm,
    567                                      Register dest,
    568                                      Register src,
    569                                      Register count,
    570                                      Register scratch,
    571                                      bool ascii);
    572 
    573   // Generate code for copying a large number of characters. This function
    574   // is allowed to spend extra time setting up conditions to make copying
    575   // faster. Copying of overlapping regions is not supported.
    576   // Dest register ends at the position after the last character written.
    577   static void GenerateCopyCharactersLong(MacroAssembler* masm,
    578                                          Register dest,
    579                                          Register src,
    580                                          Register count,
    581                                          Register scratch1,
    582                                          Register scratch2,
    583                                          Register scratch3,
    584                                          Register scratch4,
    585                                          Register scratch5,
    586                                          int flags);
    587 
    588 
    589   // Probe the symbol table for a two character string. If the string is
    590   // not found by probing a jump to the label not_found is performed. This jump
    591   // does not guarantee that the string is not in the symbol table. If the
    592   // string is found the code falls through with the string in register r0.
    593   // Contents of both c1 and c2 registers are modified. At the exit c1 is
    594   // guaranteed to contain halfword with low and high bytes equal to
    595   // initial contents of c1 and c2 respectively.
    596   static void GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm,
    597                                                    Register c1,
    598                                                    Register c2,
    599                                                    Register scratch1,
    600                                                    Register scratch2,
    601                                                    Register scratch3,
    602                                                    Register scratch4,
    603                                                    Register scratch5,
    604                                                    Label* not_found);
    605 
    606   // Generate string hash.
    607   static void GenerateHashInit(MacroAssembler* masm,
    608                                Register hash,
    609                                Register character);
    610 
    611   static void GenerateHashAddCharacter(MacroAssembler* masm,
    612                                        Register hash,
    613                                        Register character);
    614 
    615   static void GenerateHashGetHash(MacroAssembler* masm,
    616                                   Register hash);
    617 
    618  private:
    619   DISALLOW_IMPLICIT_CONSTRUCTORS(StringHelper);
    620 };
    621 
    622 
    623 void StringHelper::GenerateCopyCharacters(MacroAssembler* masm,
    624                                           Register dest,
    625                                           Register src,
    626                                           Register count,
    627                                           Register scratch,
    628                                           bool ascii) {
    629   UNIMPLEMENTED_MIPS();
    630 }
    631 
    632 
    633 enum CopyCharactersFlags {
    634   COPY_ASCII = 1,
    635   DEST_ALWAYS_ALIGNED = 2
    636 };
    637 
    638 
    639 void StringHelper::GenerateCopyCharactersLong(MacroAssembler* masm,
    640                                               Register dest,
    641                                               Register src,
    642                                               Register count,
    643                                               Register scratch1,
    644                                               Register scratch2,
    645                                               Register scratch3,
    646                                               Register scratch4,
    647                                               Register scratch5,
    648                                               int flags) {
    649   UNIMPLEMENTED_MIPS();
    650 }
    651 
    652 
    653 void StringHelper::GenerateTwoCharacterSymbolTableProbe(MacroAssembler* masm,
    654                                                         Register c1,
    655                                                         Register c2,
    656                                                         Register scratch1,
    657                                                         Register scratch2,
    658                                                         Register scratch3,
    659                                                         Register scratch4,
    660                                                         Register scratch5,
    661                                                         Label* not_found) {
    662   UNIMPLEMENTED_MIPS();
    663 }
    664 
    665 
    666 void StringHelper::GenerateHashInit(MacroAssembler* masm,
    667                                       Register hash,
    668                                       Register character) {
    669   UNIMPLEMENTED_MIPS();
    670 }
    671 
    672 
    673 void StringHelper::GenerateHashAddCharacter(MacroAssembler* masm,
    674                                               Register hash,
    675                                               Register character) {
    676   UNIMPLEMENTED_MIPS();
    677 }
    678 
    679 
    680 void StringHelper::GenerateHashGetHash(MacroAssembler* masm,
    681                                          Register hash) {
    682   UNIMPLEMENTED_MIPS();
    683 }
    684 
    685 
    686 void SubStringStub::Generate(MacroAssembler* masm) {
    687   UNIMPLEMENTED_MIPS();
    688 }
    689 
    690 
    691 void StringCompareStub::GenerateCompareFlatAsciiStrings(MacroAssembler* masm,
    692                                                         Register right,
    693                                                         Register left,
    694                                                         Register scratch1,
    695                                                         Register scratch2,
    696                                                         Register scratch3,
    697                                                         Register scratch4) {
    698   UNIMPLEMENTED_MIPS();
    699 }
    700 
    701 
    702 void StringCompareStub::Generate(MacroAssembler* masm) {
    703   UNIMPLEMENTED_MIPS();
    704 }
    705 
    706 
    707 void StringAddStub::Generate(MacroAssembler* masm) {
    708   UNIMPLEMENTED_MIPS();
    709 }
    710 
    711 
    712 void ICCompareStub::GenerateSmis(MacroAssembler* masm) {
    713   UNIMPLEMENTED_MIPS();
    714 }
    715 
    716 
    717 void ICCompareStub::GenerateHeapNumbers(MacroAssembler* masm) {
    718   UNIMPLEMENTED_MIPS();
    719 }
    720 
    721 
    722 void ICCompareStub::GenerateObjects(MacroAssembler* masm) {
    723   UNIMPLEMENTED_MIPS();
    724 }
    725 
    726 
    727 void ICCompareStub::GenerateMiss(MacroAssembler* masm) {
    728   UNIMPLEMENTED_MIPS();
    729 }
    730 
    731 
    732 void GenerateFastPixelArrayLoad(MacroAssembler* masm,
    733                                 Register receiver,
    734                                 Register key,
    735                                 Register elements_map,
    736                                 Register elements,
    737                                 Register scratch1,
    738                                 Register scratch2,
    739                                 Register result,
    740                                 Label* not_pixel_array,
    741                                 Label* key_not_smi,
    742                                 Label* out_of_range) {
    743   UNIMPLEMENTED_MIPS();
    744 }
    745 
    746 
    747 #undef __
    748 
    749 } }  // namespace v8::internal
    750 
    751 #endif  // V8_TARGET_ARCH_MIPS
    752 
    753