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 #ifdef V8_INTERPRETED_REGEXP
9 
10 #include "src/ast/ast.h"
11 #include "src/regexp/bytecodes-irregexp.h"
12 
13 namespace v8 {
14 namespace internal {
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 }  // namespace internal
58 }  // namespace v8
59 
60 #endif  // V8_INTERPRETED_REGEXP
61 
62 #endif  // V8_REGEXP_REGEXP_MACRO_ASSEMBLER_IRREGEXP_INL_H_
63