Line data Source code
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/regexp/regexp-macro-assembler-irregexp.h"
9 :
10 : #include "src/ast/ast.h"
11 : #include "src/regexp/bytecodes-irregexp.h"
12 :
13 : namespace v8 {
14 : namespace internal {
15 :
16 601194 : void RegExpMacroAssemblerIrregexp::Emit(uint32_t byte,
17 : uint32_t twenty_four_bits) {
18 601194 : uint32_t word = ((twenty_four_bits << BYTECODE_SHIFT) | byte);
19 : DCHECK(pc_ <= buffer_.length());
20 2000384 : if (pc_ + 3 >= buffer_.length()) {
21 215 : Expand();
22 : }
23 1000192 : *reinterpret_cast<uint32_t*>(buffer_.start() + pc_) = word;
24 1000192 : pc_ += 4;
25 601194 : }
26 :
27 :
28 21942 : void RegExpMacroAssemblerIrregexp::Emit16(uint32_t word) {
29 : DCHECK(pc_ <= buffer_.length());
30 43884 : if (pc_ + 1 >= buffer_.length()) {
31 8 : Expand();
32 : }
33 21942 : *reinterpret_cast<uint16_t*>(buffer_.start() + pc_) = word;
34 21942 : pc_ += 2;
35 21942 : }
36 :
37 :
38 : void RegExpMacroAssemblerIrregexp::Emit8(uint32_t word) {
39 : DCHECK(pc_ <= buffer_.length());
40 50240 : if (pc_ == buffer_.length()) {
41 3 : Expand();
42 : }
43 25120 : *reinterpret_cast<unsigned char*>(buffer_.start() + pc_) = word;
44 25120 : pc_ += 1;
45 : }
46 :
47 :
48 642649 : void RegExpMacroAssemblerIrregexp::Emit32(uint32_t word) {
49 : DCHECK(pc_ <= buffer_.length());
50 1285298 : if (pc_ + 3 >= buffer_.length()) {
51 183 : Expand();
52 : }
53 642649 : *reinterpret_cast<uint32_t*>(buffer_.start() + pc_) = word;
54 642649 : pc_ += 4;
55 642649 : }
56 :
57 : } // namespace internal
58 : } // namespace v8
59 :
60 : #endif // V8_REGEXP_REGEXP_MACRO_ASSEMBLER_IRREGEXP_INL_H_
|