Home | History | Annotate | Download | only in regexp
      1 // Copyright 2008-2009 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef V8_REGEXP_REGEXP_MACRO_ASSEMBLER_IRREGEXP_INL_H_
      6 #define V8_REGEXP_REGEXP_MACRO_ASSEMBLER_IRREGEXP_INL_H_
      7 
      8 #include "src/ast/ast.h"
      9 #include "src/regexp/bytecodes-irregexp.h"
     10 
     11 namespace v8 {
     12 namespace internal {
     13 
     14 #ifdef V8_INTERPRETED_REGEXP
     15 
     16 void RegExpMacroAssemblerIrregexp::Emit(uint32_t byte,
     17                                         uint32_t twenty_four_bits) {
     18   uint32_t word = ((twenty_four_bits << BYTECODE_SHIFT) | byte);
     19   DCHECK(pc_ <= buffer_.length());
     20   if (pc_  + 3 >= buffer_.length()) {
     21     Expand();
     22   }
     23   *reinterpret_cast<uint32_t*>(buffer_.start() + pc_) = word;
     24   pc_ += 4;
     25 }
     26 
     27 
     28 void RegExpMacroAssemblerIrregexp::Emit16(uint32_t word) {
     29   DCHECK(pc_ <= buffer_.length());
     30   if (pc_ + 1 >= buffer_.length()) {
     31     Expand();
     32   }
     33   *reinterpret_cast<uint16_t*>(buffer_.start() + pc_) = word;
     34   pc_ += 2;
     35 }
     36 
     37 
     38 void RegExpMacroAssemblerIrregexp::Emit8(uint32_t word) {
     39   DCHECK(pc_ <= buffer_.length());
     40   if (pc_ == buffer_.length()) {
     41     Expand();
     42   }
     43   *reinterpret_cast<unsigned char*>(buffer_.start() + pc_) = word;
     44   pc_ += 1;
     45 }
     46 
     47 
     48 void RegExpMacroAssemblerIrregexp::Emit32(uint32_t word) {
     49   DCHECK(pc_ <= buffer_.length());
     50   if (pc_ + 3 >= buffer_.length()) {
     51     Expand();
     52   }
     53   *reinterpret_cast<uint32_t*>(buffer_.start() + pc_) = word;
     54   pc_ += 4;
     55 }
     56 
     57 #endif  // V8_INTERPRETED_REGEXP
     58 
     59 }  // namespace internal
     60 }  // namespace v8
     61 
     62 #endif  // V8_REGEXP_REGEXP_MACRO_ASSEMBLER_IRREGEXP_INL_H_
     63