| Index: src/assembler-re2k.cc
|
| ===================================================================
|
| --- src/assembler-re2k.cc (revision 738)
|
| +++ src/assembler-re2k.cc (working copy)
|
| @@ -87,6 +87,14 @@
|
| }
|
|
|
|
|
| +void Re2kAssembler::AdvanceRegister(int index, int by) {
|
| + ASSERT(index >= 0);
|
| + Emit(BC_ADVANCE_REGISTER);
|
| + Emit(index);
|
| + Emit32(by);
|
| +}
|
| +
|
| +
|
| void Re2kAssembler::PopCurrentPosition() {
|
| Emit(BC_POP_CP);
|
| }
|
| @@ -113,12 +121,6 @@
|
| }
|
|
|
|
|
| -void Re2kAssembler::FailIfWithin(int distance_from_end) {
|
| - Emit(BC_FAIL_IF_WITHIN);
|
| - Emit32(distance_from_end);
|
| -}
|
| -
|
| -
|
| void Re2kAssembler::Succeed() {
|
| Emit(BC_SUCCEED);
|
| }
|
| @@ -150,9 +152,10 @@
|
| }
|
|
|
|
|
| -void Re2kAssembler::LoadCurrentChar(int cp_offset) {
|
| +void Re2kAssembler::LoadCurrentChar(int cp_offset, Label* on_end) {
|
| Emit(BC_LOAD_CURRENT_CHAR);
|
| Emit32(cp_offset);
|
| + EmitOrLink(on_end);
|
| }
|
|
|
|
|
| @@ -170,19 +173,10 @@
|
| }
|
|
|
|
|
| -void Re2kAssembler::CheckEnd(Label* on_not_end) {
|
| - Emit(BC_CHECK_END);
|
| - EmitOrLink(on_not_end);
|
| -}
|
| -
|
| -
|
| -void Re2kAssembler::CheckNotEnd(Label* on_end) {
|
| - Emit(BC_CHECK_NOT_END);
|
| - EmitOrLink(on_end);
|
| -}
|
| -
|
| -
|
| void Re2kAssembler::CheckRange(uc16 start, uc16 end, Label* on_mismatch) {
|
| + if (start == end) {
|
| + CheckChar(start, on_mismatch);
|
| + }
|
| Emit(BC_CHECK_RANGE);
|
| Emit16(start);
|
| Emit16(end);
|
| @@ -199,25 +193,14 @@
|
|
|
|
|
| void Re2kAssembler::CheckBackref(int capture_index,
|
| - Label* on_mismatch,
|
| - int cp_offset) {
|
| + Label* on_mismatch) {
|
| Emit(BC_CHECK_BACKREF);
|
| - Emit32(cp_offset);
|
| + Emit32(0);
|
| Emit(capture_index);
|
| EmitOrLink(on_mismatch);
|
| }
|
|
|
|
|
| -void Re2kAssembler::CheckNotBackref(int capture_index,
|
| - Label* on_match,
|
| - int cp_offset) {
|
| - Emit(BC_CHECK_NOT_BACKREF);
|
| - Emit32(cp_offset);
|
| - Emit(capture_index);
|
| - EmitOrLink(on_match);
|
| -}
|
| -
|
| -
|
| void Re2kAssembler::CheckRegister(int byte_code,
|
| int reg_index,
|
| uint16_t vs,
|
| @@ -229,20 +212,70 @@
|
| }
|
|
|
|
|
| -void Re2kAssembler::CheckRegisterLt(int reg_index,
|
| +void Re2kAssembler::CheckRegisterLT(int reg_index,
|
| uint16_t vs,
|
| Label* on_less_than) {
|
| CheckRegister(BC_CHECK_REGISTER_LT, reg_index, vs, on_less_than);
|
| }
|
|
|
|
|
| -void Re2kAssembler::CheckRegisterGe(int reg_index,
|
| +void Re2kAssembler::CheckRegisterGE(int reg_index,
|
| uint16_t vs,
|
| Label* on_greater_than_equal) {
|
| CheckRegister(BC_CHECK_REGISTER_GE, reg_index, vs, on_greater_than_equal);
|
| }
|
|
|
|
|
| +void Re2kAssembler::LookupMap1(uc16 start, Label* bit_map, Label* on_zero) {
|
| + Emit(BC_LOOKUP_MAP1);
|
| + Emit16(start);
|
| + EmitOrLink(bit_map);
|
| + EmitOrLink(on_zero);
|
| +}
|
| +
|
| +
|
| +void Re2kAssembler::LookupMap2(uc16 start,
|
| + Label* half_nibble_map,
|
| + const Vector<Label*>& table) {
|
| + Emit(BC_LOOKUP_MAP2);
|
| + Emit16(start);
|
| + EmitOrLink(half_nibble_map);
|
| + ASSERT(table.length() > 0);
|
| + ASSERT(table.length() <= 4);
|
| + for (int i = 0; i < table.length(); i++) {
|
| + EmitOrLink(table[i]);
|
| + }
|
| +}
|
| +
|
| +
|
| +void Re2kAssembler::LookupMap8(uc16 start,
|
| + Label* byte_map,
|
| + const Vector<Label*>& table) {
|
| + Emit(BC_LOOKUP_MAP8);
|
| + Emit16(start);
|
| + EmitOrLink(byte_map);
|
| + ASSERT(table.length() > 0);
|
| + ASSERT(table.length() <= 256);
|
| + for (int i = 0; i < table.length(); i++) {
|
| + EmitOrLink(table[i]);
|
| + }
|
| +}
|
| +
|
| +
|
| +void Re2kAssembler::LookupHighMap8(byte start,
|
| + Label* byte_map,
|
| + const Vector<Label*>& table) {
|
| + Emit(BC_LOOKUP_HI_MAP8);
|
| + Emit(start);
|
| + EmitOrLink(byte_map);
|
| + ASSERT(table.length() > 0);
|
| + ASSERT(table.length() <= 256);
|
| + for (int i = 0; i < table.length(); i++) {
|
| + EmitOrLink(table[i]);
|
| + }
|
| +}
|
| +
|
| +
|
| int Re2kAssembler::length() {
|
| return pc_;
|
| }
|
|
|