08d630 | 2002-10-10 | Martin Nilsson | | // This file is part of Pike. For copyright information see COPYRIGHT.
// Pike is distributed under GPL, LGPL and MPL. See the file COPYING
// for more information.
|
596e36 | 1998-03-31 | Fredrik Hübinette (Hubbe) | |
|
66d51c | 1997-03-04 | Fredrik Hübinette (Hubbe) | | NOP :
|
225ee3 | 2014-09-01 | Per Hedbor | | POP_N_ELEMS (0) :
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | | POP_N_ELEMS POP_VALUE : POP_N_ELEMS ($1a + 1)
POP_VALUE POP_N_ELEMS : POP_N_ELEMS ($2a + 1)
|
225ee3 | 2014-09-01 | Per Hedbor | | POP_VALUE POP_VALUE POP_VALUE : POP_N_ELEMS (3)
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | | POP_N_ELEMS POP_N_ELEMS : POP_N_ELEMS ($1a + $2a)
POP_N_ELEMS(1) : POP_VALUE
|
71d2c2 | 2001-01-15 | Martin Stjernholm | | POP_VALUE POP_TO_MARK : POP_TO_MARK
POP_N_ELEMS POP_TO_MARK : POP_TO_MARK
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | |
|
c67d34 | 1996-08-03 | Fredrik Hübinette (Hubbe) | | MARK MARK: MARK2
|
71d2c2 | 2001-01-15 | Martin Stjernholm | | MARK POP_MARK:
|
c1cd4f | 2012-06-18 | Henrik Grubbström (Grubba) | | MARK2 POP_MARK: MARK
MARK POP_TO_MARK:
MARK2 POP_TO_MARK: MARK
|
f4107d | 2012-06-18 | Per Hedbor | |
|
bd01ff | 2004-08-26 | Henrik Grubbström (Grubba) | | SWAP SWAP:
DUP POP_VALUE:
DUP POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
|
beddab | 2001-01-31 | Martin Stjernholm | | // The opcode list is clearer without this.
//SYNCH_MARK POP_SYNCH_MARK:
|
c67d34 | 1996-08-03 | Fredrik Hübinette (Hubbe) | |
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | | ASSIGN_GLOBAL POP_VALUE : ASSIGN_GLOBAL_AND_POP($1a)
ASSIGN_LOCAL POP_VALUE : ASSIGN_LOCAL_AND_POP($1a)
|
beddab | 2001-01-31 | Martin Stjernholm | | RECUR POP_VALUE : RECUR_AND_POP($1a)
|
70be66 | 2001-06-19 | Fredrik Hübinette (Hubbe) | |
|
5016a9 | 2004-08-23 | Henrik Grubbström (Grubba) | | // Negation and complement of constants.
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | | NUMBER(0) : CONST0
NUMBER(1) : CONST1
NUMBER(-1) : CONST_1
|
7df16a | 2005-06-27 | Henrik Grubbström (Grubba) | | NEG_NUMBER(1) : CONST_1
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | | NUMBER (0x7fffffff) : BIGNUM
CONST0 NEGATE : CONST0
CONST1 NEGATE : CONST_1
CONST_1 NEGATE : CONST1
NUMBER NEGATE : NEG_NUMBER($1a)
NEG_NUMBER NEGATE : NUMBER ($1a)
|
c63dec | 2013-01-06 | Arne Goedeke | | NUMBER [ $1a < 0 && !INT32_NEG_OVERFLOW($1a) ] : NEG_NUMBER (-$1a)
NEG_NUMBER [ $1a <= 0 && !INT32_NEG_OVERFLOW($1a) ] : NUMBER (-$1a)
|
3c04e8 | 1997-03-13 | Fredrik Hübinette (Hubbe) | | NEGATE NEGATE :
|
baa91a | 2014-09-06 | Henrik Grubbström (Grubba) | | CONST0 COMPL: CONST_1
CONST1 COMPL: NEG_NUMBER(2)
CONST_1 COMPL: CONST0
NUMBER COMPL: NEG_NUMBER($1a+1)
NEG_NUMBER COMPL: NUMBER($1a-1)
BIGNUM COMPL: NUMBER(-0x80000000) // Note: Invalid as NEG_NUMBER on 32bit!
|
3c04e8 | 1997-03-13 | Fredrik Hübinette (Hubbe) | | COMPL COMPL :
|
a2b70a | 2000-04-30 | Fredrik Hübinette (Hubbe) | | NEGATE CONST_1 ADD_INTS : COMPL
|
baa91a | 2014-09-06 | Henrik Grubbström (Grubba) | | NEGATE ADD_NEG_INT(1) : COMPL
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | | NEGATE CONST1 SUBTRACT : COMPL
|
baa91a | 2014-09-06 | Henrik Grubbström (Grubba) | | CONST1 ADD_INTS NEGATE : COMPL
ADD_INT(1) NEGATE : COMPL
CONST_1 SUBTRACT NEGATE : COMPL
COMPL CONST1 ADD_INTS : NEGATE
COMPL ADD_INT(1) : NEGATE
COMPL CONST_1 SUBTRACT : NEGATE
CONST_1 ADD_INTS COMPL : NEGATE
ADD_NEG_INT(1) COMPL : NEGATE
CONST1 SUBTRACT COMPL : NEGATE
|
5016a9 | 2004-08-23 | Henrik Grubbström (Grubba) | | NUMBER ASSIGN_LOCAL NEGATE: NUMBER($1a) ASSIGN_LOCAL_AND_POP($2a) NEG_NUMBER($1a)
NEG_NUMBER ASSIGN_LOCAL NEGATE: NEG_NUMBER($1a) ASSIGN_LOCAL_AND_POP($2a) NUMBER($1a)
CONST1 ASSIGN_LOCAL NEGATE: CONST1 ASSIGN_LOCAL_AND_POP($2a) CONST_1
CONST_1 ASSIGN_LOCAL NEGATE: CONST_1 ASSIGN_LOCAL_AND_POP($2a) CONST1
CONST0 ASSIGN_LOCAL: CLEAR_LOCAL($2a) CONST0
|
a7538d | 1998-05-12 | Fredrik Hübinette (Hubbe) | |
|
8d63bc | 2000-08-22 | Henrik Grubbström (Grubba) | | LOCAL_2_LOCAL [$1a == $1b] :
|
99c1e9 | 2012-06-20 | Per Hedbor | | GLOBAL ASSIGN_GLOBAL_AND_POP($1a) :
|
5016a9 | 2004-08-23 | Henrik Grubbström (Grubba) | |
|
f4107d | 2012-06-18 | Per Hedbor | | // Generated by for( int i=0; i<local; i++ ) where i is not used in
// the loop.
ASSIGN_LOCAL_NUMBER_AND_POP LOCAL($1a) : ASSIGN_LOCAL_NUMBER_AND_POP($1a,$1b) NUMBER($1b)
ASSIGN_GLOBAL_NUMBER_AND_POP GLOBAL($1a) : ASSIGN_GLOBAL_NUMBER_AND_POP($1a,$1b) NUMBER($1b)
NUMBER COMPL: NUMBER(~$1a)
ASSIGN_LOCAL_NUMBER_AND_POP LOCAL_LVALUE LOCAL($1a) : ASSIGN_LOCAL_NUMBER_AND_POP($1a,$1b) LOCAL_LVALUE($2a) NUMBER($1b)
ASSIGN_GLOBAL_NUMBER_AND_POP GLOBAL_LVALUE GLOBAL($1a) : ASSIGN_GLOBAL_NUMBER_AND_POP($1a,$1b) GLOBAL_LVALUE($2a) NUMBER($1b)
ASSIGN_LOCAL_NUMBER_AND_POP GLOBAL_LVALUE LOCAL($1a) : ASSIGN_LOCAL_NUMBER_AND_POP($1a,$1b) GLOBAL_LVALUE($2a) NUMBER($1b)
// Ok, this is ridiculously specific, but it is generated by for(..)
// when the variable is not used, like above, but for globals:
|
771a51 | 2013-01-01 | Jonas Walldén | | ASSIGN_GLOBAL_NUMBER_AND_POP[$1b > -0x80000000L] GLOBAL_LVALUE($1a) DEC: ASSIGN_GLOBAL_NUMBER_AND_POP($1a, $1b - 1) NUMBER($1b - 1)
|
c1cd4f | 2012-06-18 | Henrik Grubbström (Grubba) | |
|
217cde | 2012-06-20 | Henrik Grubbström (Grubba) | | ASSIGN_GLOBAL_NUMBER_AND_POP[$1b < 0x7fffffff] GLOBAL_LVALUE($1a) INC: ASSIGN_GLOBAL_NUMBER_AND_POP($1a, $1b + 1) NUMBER($1b + 1)
|
c1cd4f | 2012-06-18 | Henrik Grubbström (Grubba) | |
|
771a51 | 2013-01-01 | Jonas Walldén | | ASSIGN_GLOBAL_NUMBER_AND_POP[$1b > -0x80000000L] GLOBAL_LVALUE($1a) DEC_AND_POP: ASSIGN_GLOBAL_NUMBER_AND_POP($1a, $1b - 1)
|
217cde | 2012-06-20 | Henrik Grubbström (Grubba) | | ASSIGN_GLOBAL_NUMBER_AND_POP[$1b < 0x7fffffff] GLOBAL_LVALUE($1a) INC_AND_POP: ASSIGN_GLOBAL_NUMBER_AND_POP($1a, $1b + 1)
|
f4107d | 2012-06-18 | Per Hedbor | |
LOCAL_LVALUE LOCAL ADD_TO_AND_POP : ADD_LOCALS_AND_POP($1a,$2a)
LOCAL_LVALUE NUMBER ADD_TO_AND_POP: ADD_LOCAL_INT_AND_POP($1a,$2a)
LOCAL_LVALUE CONST_1 ADD_TO_AND_POP: ADD_LOCAL_INT_AND_POP($1a,-1)
LOCAL_LVALUE CONST1 ADD_TO_AND_POP: ADD_LOCAL_INT_AND_POP($1a,1)
LOCAL_LVALUE CONST0 ADD_TO_AND_POP:
|
5ea1d9 | 2012-06-22 | Per Hedbor | | LOCAL_LVALUE LTOSVAL ADD_INT ASSIGN: ADD_LOCAL_INT($1a,$3a)
|
e01f88 | 2014-08-31 | Henrik Grubbström (Grubba) | | LOCAL_LVALUE LTOSVAL ADD_NEG_INT [ !INT32_NEG_OVERFLOW($3a) ] ASSIGN: ADD_LOCAL_INT($1a,-$3a)
|
5ea1d9 | 2012-06-22 | Per Hedbor | |
|
f4107d | 2012-06-18 | Per Hedbor | | NUMBER ASSIGN_LOCAL_AND_POP : ASSIGN_LOCAL_NUMBER_AND_POP($2a,$1a)
CONST0 ASSIGN_LOCAL_AND_POP : CLEAR_LOCAL($2a)
CONST1 ASSIGN_LOCAL_AND_POP : ASSIGN_LOCAL_NUMBER_AND_POP($2a,1)
CONST_1 ASSIGN_LOCAL_AND_POP : ASSIGN_LOCAL_NUMBER_AND_POP($2a,-1)
NUMBER ASSIGN_GLOBAL_AND_POP : ASSIGN_GLOBAL_NUMBER_AND_POP($2a,$1a)
CONST0 ASSIGN_GLOBAL_AND_POP : ASSIGN_GLOBAL_NUMBER_AND_POP($2a,0)
CONST1 ASSIGN_GLOBAL_AND_POP : ASSIGN_GLOBAL_NUMBER_AND_POP($2a,1)
CONST_1 ASSIGN_GLOBAL_AND_POP : ASSIGN_GLOBAL_NUMBER_AND_POP($2a,-1)
|
8d63bc | 2000-08-22 | Henrik Grubbström (Grubba) | |
|
a7538d | 1998-05-12 | Fredrik Hübinette (Hubbe) | | // Remove clearing of locals from the beginning of functions
|
50a103 | 2002-02-26 | Henrik Grubbström (Grubba) | | // But don't remove clearing of arguments!
BYTE ENTRY START_FUNCTION LABEL(0) CLEAR_LOCAL [$1a <= $5a] : BYTE($1a) ENTRY START_FUNCTION LABEL(0)
|
6b2638 | 2014-08-15 | Per Hedbor | | BYTE ENTRY START_FUNCTION LABEL(0) CLEAR_N_LOCAL [$1a <= $5a] : BYTE($1a) ENTRY START_FUNCTION LABEL(0)
|
873ceb | 2000-04-30 | Fredrik Hübinette (Hubbe) | |
|
50a103 | 2002-02-26 | Henrik Grubbström (Grubba) | | BYTE ENTRY START_FUNCTION CLEAR_LOCAL [$1a <= $4a] : BYTE($1a) ENTRY START_FUNCTION
|
6b2638 | 2014-08-15 | Per Hedbor | | BYTE ENTRY START_FUNCTION CLEAR_N_LOCAL [$1a <= $4a] : BYTE($1a) ENTRY START_FUNCTION
|
a7538d | 1998-05-12 | Fredrik Hübinette (Hubbe) | |
|
5016a9 | 2004-08-23 | Henrik Grubbström (Grubba) | | CLEAR_LOCAL CLEAR_LOCAL($1a) : CLEAR_LOCAL($1a)
|
6b2638 | 2014-08-15 | Per Hedbor | | CLEAR_LOCAL CLEAR_LOCAL($1a+1) : CLEAR_N_LOCAL($1a,2)
|
d3d04d | 2015-02-07 | Henrik Grubbström (Grubba) | | CLEAR_LOCAL CLEAR_LOCAL($1a-1) : CLEAR_N_LOCAL($2a,2)
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | |
|
6b2638 | 2014-08-15 | Per Hedbor | | CLEAR_LOCAL CLEAR_N_LOCAL($1a+1) : CLEAR_N_LOCAL($1a,$2b+1)
|
d3d04d | 2015-02-07 | Henrik Grubbström (Grubba) | | CLEAR_N_LOCAL CLEAR_LOCAL($1a-1) : CLEAR_N_LOCAL($1a-1, $1b+1)
|
6b2638 | 2014-08-15 | Per Hedbor | | CLEAR_N_LOCAL CLEAR_LOCAL($1a+$1b) : CLEAR_N_LOCAL($1a,$1b+1)
|
3336a0 | 2006-03-15 | Henrik Grubbström (Grubba) | |
|
d3d04d | 2015-02-07 | Henrik Grubbström (Grubba) | | // Overlapping range and single:
CLEAR_LOCAL CLEAR_N_LOCAL [$1a >= $2a] [$1a < $2a+$2b] : CLEAR_N_LOCAL($2a, $2b)
CLEAR_N_LOCAL CLEAR_LOCAL [$1a <= $2a] [$2a < $1a+$1b] : CLEAR_N_LOCAL($1a, $1b)
// Joining of ranges:
CLEAR_N_LOCAL CLEAR_N_LOCAL [$1a <= $2a] [$1a + $1b >= $2a] : CLEAR_N_LOCAL($1a, MAXIMUM($1a + $1b, $2a + $2b) - $1a)
CLEAR_N_LOCAL CLEAR_N_LOCAL [$2a <= $1a] [$2a + $2b >= $1a] : CLEAR_N_LOCAL($2a, MAXIMUM($1a + $1b, $2a + $2b) - $2a)
|
3336a0 | 2006-03-15 | Henrik Grubbström (Grubba) | | // Attempt to de-interleave clearing of locals.
CONST0 CLEAR_LOCAL : CLEAR_LOCAL($2a) CONST0
CONST1 CLEAR_LOCAL : CLEAR_LOCAL($2a) CONST1
CONST_1 CLEAR_LOCAL : CLEAR_LOCAL($2a) CONST_1
NUMBER CLEAR_LOCAL : CLEAR_LOCAL($2a) NUMBER($1a)
NEG_NUMBER CLEAR_LOCAL : CLEAR_LOCAL($2a) NEG_NUMBER($1a)
CONSTANT CLEAR_LOCAL : CLEAR_LOCAL($2a) CONSTANT($1a)
|
d3d04d | 2015-02-07 | Henrik Grubbström (Grubba) | | // FIXME:
// The following aren't sound as they need to account for
// frame->min_number_of_locals to not affect trampolines.
// The cleanest fix is probably to move trampolies to true objects.
// CLEAR_LOCAL RETURN_0: RETURN_0
// CLEAR_LOCAL_RETURN_1: RETURN_1
// CLEAR_N_LOCAL RETURN_0: RETURN_0
// CLEAR_N_LOCAL RETURN_1: RETURN_1
|
3336a0 | 2006-03-15 | Henrik Grubbström (Grubba) | |
|
596e36 | 1998-03-31 | Fredrik Hübinette (Hubbe) | | // CONST_1 MULTIPLY : NEGATE
// CONST0 MULTIPLY : POP_VALUE CONST0
|
99c1e9 | 2012-06-20 | Per Hedbor | | // CONST1 MULTIPLY :
|
502e2b | 2001-01-18 | Henrik Grubbström (Grubba) | | // NUMBER MULTIPLY [!($1a & ($1a - 1))]: NUMBER(my_log2($1a)) LSH
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | |
|
596e36 | 1998-03-31 | Fredrik Hübinette (Hubbe) | | // CONST_1 DIVIDE : NEGATE
|
99c1e9 | 2012-06-20 | Per Hedbor | | // CONST1 DIVIDE :
|
502e2b | 2001-01-18 | Henrik Grubbström (Grubba) | | // NUMBER DIVIDE [!($1a & ($1a - 1))]: NUMBER(my_log2($1a)) RSH
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | |
CONST0 SUBTRACT:
CONST0 XOR:
CONST_1 XOR: COMPL
CONST0 RETURN: RETURN_0
|
3c04e8 | 1997-03-13 | Fredrik Hübinette (Hubbe) | | CONST1 RETURN: RETURN_1
|
395899 | 2001-06-23 | Fredrik Hübinette (Hubbe) | | CONST0 VOLATILE_RETURN: RETURN_0
CONST1 VOLATILE_RETURN: RETURN_1
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | | INC POP_VALUE: INC_AND_POP
POST_INC POP_VALUE: INC_AND_POP
DEC POP_VALUE: DEC_AND_POP
POST_DEC POP_VALUE: DEC_AND_POP
NOT BRANCH_WHEN_NON_ZERO: BRANCH_WHEN_ZERO($2a)
NOT BRANCH_WHEN_ZERO: BRANCH_WHEN_NON_ZERO($2a)
|
dbd32e | 2000-04-26 | Fredrik Hübinette (Hubbe) | | POP_VALUE RETURN_0: RETURN_0
POP_N_ELEMS RETURN_0: RETURN_0
POP_VALUE RETURN_1: RETURN_1
POP_N_ELEMS RETURN_1: RETURN_1
|
29f2fa | 2001-02-01 | Martin Stjernholm | | // F_SYNCH_MARK and F_POP_SYNCH_MARK is output only with -d3 and
// higher. We keep them solely for balancing the asm debug output.
#define DeadCodeEndCond(op) \
|
3336a0 | 2006-03-15 | Henrik Grubbström (Grubba) | | [op != F_LABEL && op != F_SYNCH_MARK && op != F_POP_SYNCH_MARK && op != F_ENTRY]
|
29f2fa | 2001-02-01 | Martin Stjernholm | | BRANCH ? DeadCodeEndCond($2o) : BRANCH($1a)
RETURN ? DeadCodeEndCond($2o) : RETURN
|
395899 | 2001-06-23 | Fredrik Hübinette (Hubbe) | | VOLATILE_RETURN ? DeadCodeEndCond($2o) : VOLATILE_RETURN
|
29f2fa | 2001-02-01 | Martin Stjernholm | | RETURN_0 ? DeadCodeEndCond($2o) : RETURN_0
RETURN_1 ? DeadCodeEndCond($2o) : RETURN_1
RETURN_LOCAL ? DeadCodeEndCond($2o) : RETURN_LOCAL($1a)
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | |
|
c4fc4c | 2002-09-24 | Henrik Grubbström (Grubba) | | // Get rid of extra catch-levels.
// Note that the corresponding exit catch is killed
// by dead code elimination.
CATCH ESCAPE_CATCH:
|
b6e7a8 | 2014-08-15 | Henrik Grubbström (Grubba) | | LEXICAL_LOCAL [!$1b] : LOCAL($1a)
LEXICAL_LOCAL_LVALUE [!$1b] : LOCAL_LVALUE($1a)
EXTERNAL [!$1b] : GLOBAL($1a)
EXTERNAL_LVALUE [!$1b] : GLOBAL_LVALUE($1a)
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | | LOCAL_LVALUE INC : INC_LOCAL ($1a)
LOCAL_LVALUE POST_INC : POST_INC_LOCAL ($1a)
LOCAL_LVALUE INC_AND_POP : INC_LOCAL_AND_POP ($1a)
INC_LOCAL POP_VALUE : INC_LOCAL_AND_POP ($1a)
POST_INC_LOCAL POP_VALUE : INC_LOCAL_AND_POP ($1a)
LOCAL_LVALUE DEC : DEC_LOCAL ($1a)
LOCAL_LVALUE POST_DEC : POST_DEC_LOCAL ($1a)
LOCAL_LVALUE DEC_AND_POP : DEC_LOCAL_AND_POP ($1a)
DEC_LOCAL POP_VALUE : DEC_LOCAL_AND_POP ($1a)
POST_DEC_LOCAL POP_VALUE : DEC_LOCAL_AND_POP ($1a)
|
3f1dd5 | 2004-08-24 | Henrik Grubbström (Grubba) | | ASSIGN_GLOBAL_AND_POP GLOBAL_LVALUE($1a) INC_AND_POP : ADD_INT(1) ASSIGN_GLOBAL_AND_POP($1a)
ASSIGN_GLOBAL_AND_POP GLOBAL_LVALUE($1a) DEC_AND_POP : ADD_NEG_INT(1) ASSIGN_GLOBAL_AND_POP($1a)
GLOBAL_LVALUE INC_AND_POP GLOBAL($1a) : GLOBAL_LVALUE($1a) INC
GLOBAL_LVALUE DEC_AND_POP GLOBAL($1a) : GLOBAL_LVALUE($1a) DEC
|
5016a9 | 2004-08-23 | Henrik Grubbström (Grubba) | | ASSIGN_LOCAL RETURN [!(Pike_compiler->compiler_frame->lexical_scope & SCOPE_SCOPED)]: RETURN
ASSIGN_LOCAL VOLATILE_RETURN [!(Pike_compiler->compiler_frame->lexical_scope & SCOPE_SCOPED)]: VOLATILE_RETURN
|
0f1943 | 1999-11-29 | Fredrik Hübinette (Hubbe) | |
ASSIGN_LOCAL BRANCH_WHEN_ZERO LOCAL($1a) RETURN LABEL($2a): ASSIGN_LOCAL($1a) RETURN_IF_TRUE LABEL($2a)
|
395899 | 2001-06-23 | Fredrik Hübinette (Hubbe) | | ASSIGN_LOCAL BRANCH_WHEN_ZERO LOCAL($1a) VOLATILE_RETURN LABEL($2a): ASSIGN_LOCAL($1a) RETURN_IF_TRUE LABEL($2a)
|
0f1943 | 1999-11-29 | Fredrik Hübinette (Hubbe) | |
|
777a26 | 2000-06-24 | Fredrik Hübinette (Hubbe) | | ASSIGN_LOCAL BRANCH_WHEN_ZERO LOCAL($1a) RETURN LABEL($2a) [!(Pike_compiler->compiler_frame->lexical_scope & SCOPE_SCOPED)] : RETURN_IF_TRUE ASSIGN_LOCAL($1a) LABEL($2a)
|
395899 | 2001-06-23 | Fredrik Hübinette (Hubbe) | | ASSIGN_LOCAL BRANCH_WHEN_ZERO LOCAL($1a) VOLATILE_RETURN LABEL($2a) [!(Pike_compiler->compiler_frame->lexical_scope & SCOPE_SCOPED)] : RETURN_IF_TRUE ASSIGN_LOCAL($1a) LABEL($2a)
|
0f1943 | 1999-11-29 | Fredrik Hübinette (Hubbe) | |
ASSIGN_GLOBAL BRANCH_WHEN_ZERO GLOBAL($1a) RETURN LABEL($2a): ASSIGN_GLOBAL($1a) RETURN_IF_TRUE LABEL($2a)
|
395899 | 2001-06-23 | Fredrik Hübinette (Hubbe) | | ASSIGN_GLOBAL BRANCH_WHEN_ZERO GLOBAL($1a) VOLATILE_RETURN LABEL($2a): ASSIGN_GLOBAL($1a) RETURN_IF_TRUE LABEL($2a)
|
0f1943 | 1999-11-29 | Fredrik Hübinette (Hubbe) | |
|
c67d34 | 1996-08-03 | Fredrik Hübinette (Hubbe) | |
GLOBAL_LVALUE INC_AND_POP GLOBAL($1a): GLOBAL_LVALUE($1a) INC
GLOBAL_LVALUE DEC_AND_POP GLOBAL($1a): GLOBAL_LVALUE($1a) DEC
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | | CONST1 BRANCH_WHEN_ZERO:
CONST0 BRANCH_WHEN_ZERO: BRANCH($2a)
CONST1 BRANCH_WHEN_NON_ZERO: BRANCH($2a)
|
99c1e9 | 2012-06-20 | Per Hedbor | | CONST0 BRANCH_WHEN_NON_ZERO:
|
5016a9 | 2004-08-23 | Henrik Grubbström (Grubba) | | NUMBER [$1a] BRANCH_WHEN_ZERO:
NUMBER [$1a] BRANCH_WHEN_NON_ZERO: BRANCH($2a)
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | |
|
419fab | 1997-03-09 | Fredrik Hübinette (Hubbe) | | EQ LOR: EQ_OR ($2a)
|
2d1234 | 1997-03-10 | Fredrik Hübinette (Hubbe) | | EQ LAND: EQ_AND ($2a)
|
419fab | 1997-03-09 | Fredrik Hübinette (Hubbe) | |
|
2199ed | 1996-04-13 | Fredrik Hübinette (Hubbe) | | EQ NOT: NE
NE NOT: EQ
|
f5971b | 2004-11-27 | Martin Stjernholm | |
// The following only work on total orders. We can't assume that.
//
// LT NOT: GE
// GT NOT: LE
// LE NOT: GT
// GE NOT: LT
|
c67d34 | 1996-08-03 | Fredrik Hübinette (Hubbe) | |
|
bd01ff | 2004-08-26 | Henrik Grubbström (Grubba) | | LOCAL LOCAL : 2_LOCALS ($1a,$2a)
MARK LOCAL : MARK_AND_LOCAL ($2a)
|
081147 | 2001-07-02 | Fredrik Hübinette (Hubbe) | | MARK GLOBAL: MARK_AND_GLOBAL ($2a)
|
9b08a2 | 1998-03-31 | Fredrik Hübinette (Hubbe) | | MARK STRING : MARK_AND_STRING($2a)
|
32315c | 2001-06-29 | Fredrik Hübinette (Hubbe) | | MARK EXTERNAL : MARK_AND_EXTERNAL($2a,$2b)
|
a82893 | 2001-08-31 | Fredrik Hübinette (Hubbe) | | MARK CONST0 : MARK_AND_CONST0
MARK CONST1 : MARK_AND_CONST1
|
c67d34 | 1996-08-03 | Fredrik Hübinette (Hubbe) | | LOCAL SIZEOF: SIZEOF_LOCAL ($1a)
|
956b12 | 2014-09-23 | Per Hedbor | | LOCAL SIZEOF_STRING: SIZEOF_LOCAL_STRING ($1a)
|
bd01ff | 2004-08-26 | Henrik Grubbström (Grubba) | | MARK_AND_LOCAL SIZEOF: MARK SIZEOF_LOCAL ($1a)
2_LOCALS SIZEOF: LOCAL($1a) SIZEOF_LOCAL ($1b)
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | STRING INDEX: STRING_INDEX ($1a)
|
6e36e5 | 2000-11-30 | Fredrik Hübinette (Hubbe) | | INDEX SWITCH: SWITCH_ON_INDEX($2a)
LOCAL SWITCH: SWITCH_ON_LOCAL($1a,$2a)
|
bd01ff | 2004-08-26 | Henrik Grubbström (Grubba) | | 2_LOCALS SWITCH: LOCAL($1a) SWITCH_ON_LOCAL($1b,$2a)
|
99761f | 1998-10-09 | Fredrik Hübinette (Hubbe) | |
STRING CLEAR_STRING_SUBTYPE: STRING ($1a)
CONST0 CLEAR_STRING_SUBTYPE: CONST0
CONST1 CLEAR_STRING_SUBTYPE: CONST1
CONST_1 CLEAR_STRING_SUBTYPE: CONST_1
NUMBER CLEAR_STRING_SUBTYPE: NUMBER($1a)
NEG_NUMBER CLEAR_STRING_SUBTYPE: NEG_NUMBER($1a)
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | LOCAL INDEX: LOCAL_INDEX ($1a)
|
99761f | 1998-10-09 | Fredrik Hübinette (Hubbe) | | LOCAL CLEAR_STRING_SUBTYPE INDEX: LOCAL_INDEX ($1a)
|
bd01ff | 2004-08-26 | Henrik Grubbström (Grubba) | | MARK_AND_LOCAL INDEX: MARK LOCAL_INDEX ($1a)
MARK_AND_LOCAL CLEAR_STRING_SUBTYPE INDEX: MARK LOCAL_INDEX ($1a)
2_LOCALS INDEX: LOCAL_LOCAL_INDEX($1b,$1a)
2_LOCALS CLEAR_STRING_SUBTYPE INDEX: LOCAL_LOCAL_INDEX($1b,$1a)
|
99761f | 1998-10-09 | Fredrik Hübinette (Hubbe) | |
|
bd01ff | 2004-08-26 | Henrik Grubbström (Grubba) | | 2_LOCALS [$1a == $1b]: LOCAL($1a) DUP
GLOBAL GLOBAL($1a): GLOBAL($1a) DUP
|
99761f | 1998-10-09 | Fredrik Hübinette (Hubbe) | |
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | CONST0 INDEX: POS_INT_INDEX (0)
CONST_1 INDEX: NEG_INT_INDEX (1)
CONST1 INDEX: POS_INT_INDEX (1)
|
5016a9 | 2004-08-23 | Henrik Grubbström (Grubba) | | NUMBER INDEX: POS_INT_INDEX ($1a)
NEG_NUMBER INDEX: NEG_INT_INDEX ($1a)
|
c63dec | 2013-01-06 | Arne Goedeke | | POS_INT_INDEX [$1a < 0 && !INT32_NEG_OVERFLOW($1a) ]: NEG_INT_INDEX (-$1a)
NEG_INT_INDEX [$1a <= 0 && !INT32_NEG_OVERFLOW($1a) ]: POS_INT_INDEX (-$1a)
|
3c04e8 | 1997-03-13 | Fredrik Hübinette (Hubbe) | |
BRANCH_WHEN_ZERO BRANCH LABEL ($1a): BRANCH_WHEN_NON_ZERO($2a) LABEL($1a)
BRANCH_WHEN_NON_ZERO BRANCH LABEL ($1a): BRANCH_WHEN_ZERO($2a) LABEL($1a)
BRANCH_WHEN_EQ BRANCH LABEL ($1a) : BRANCH_WHEN_NE($2a) LABEL($1a)
BRANCH_WHEN_NE BRANCH LABEL ($1a) : BRANCH_WHEN_EQ($2a) LABEL($1a)
|
f5971b | 2004-11-27 | Martin Stjernholm | | // The following only work on total orders. We can't assume that.
//
// BRANCH_WHEN_LT BRANCH LABEL ($1a) : BRANCH_WHEN_GE($2a) LABEL($1a)
// BRANCH_WHEN_GE BRANCH LABEL ($1a) : BRANCH_WHEN_LT($2a) LABEL($1a)
//
// BRANCH_WHEN_LE BRANCH LABEL ($1a) : BRANCH_WHEN_GT($2a) LABEL($1a)
// BRANCH_WHEN_GT BRANCH LABEL ($1a) : BRANCH_WHEN_LE($2a) LABEL($1a)
|
3c04e8 | 1997-03-13 | Fredrik Hübinette (Hubbe) | |
|
a2b70a | 2000-04-30 | Fredrik Hübinette (Hubbe) | | CONST0 ADD_INTS: ADD_INT (0)
CONST1 ADD_INTS: ADD_INT (1)
CONST_1 ADD_INTS: ADD_NEG_INT (1)
|
872aa2 | 2004-08-24 | Henrik Grubbström (Grubba) | | NUMBER [$1a >= 0] ADD_INTS : ADD_INT ($1a)
NEG_NUMBER [$1a > 0] ADD_INTS : ADD_NEG_INT ($1a)
|
baa91a | 2014-09-06 | Henrik Grubbström (Grubba) | | ADD_INT [$1a < 0 && !INT32_NEG_OVERFLOW($1a)]: ADD_NEG_INT(-$1a)
ADD_NEG_INT [$1a < 0 && !INT32_NEG_OVERFLOW($1a)]: ADD_INT(-$1a)
|
a2b70a | 2000-04-30 | Fredrik Hübinette (Hubbe) | |
|
396e26 | 2014-08-31 | Per Hedbor | | #define OPER_INT(X,Y) \
X MOD : MOD_INT(Y); \
X LSH : LSH_INT(Y); \
X RSH : RSH_INT(Y); \
X SUBTRACT : SUBTRACT_INT(Y); \
X ADD : ADD_INT(Y); \
X AND : AND_INT(Y); \
X OR : OR_INT(Y); \
X XOR : XOR_INT(Y); \
X DIVIDE : DIVIDE_INT(Y);\
X MULTIPLY : MULTIPLY_INT(Y);
OPER_INT(NUMBER,$1a)
OPER_INT(NEG_NUMBER [!INT32_NEG_OVERFLOW($1a)], -$1a)
OPER_INT(CONST1,1)
OPER_INT(CONST_1,-1)
OPER_INT(BIGNUM,0x7fffffff)
|
98b71c | 2014-10-20 | Martin Nilsson | | #undef OPER_INT
CONST0 MOD [ yyerror("Divide by constant 0"),1 ] :
CONST0 DIVIDE [ yyerror("Divide by constant 0"),1 ] :
CONST0 LSH : LSH_INT(0);
CONST0 RSH : RSH_INT(0);
CONST0 SUBTRACT : SUBTRACT_INT(0);
CONST0 ADD : ADD_INT(0);
CONST0 AND : AND_INT(0);
CONST0 OR : OR_INT(0);
CONST0 XOR : XOR_INT(0);
CONST0 MULTIPLY : MULTIPLY_INT(0);
|
0a6746 | 2014-08-31 | Henrik Grubbström (Grubba) | | // Some noops related to the above opcodes.
|
d91e7e | 2014-09-06 | Henrik Grubbström (Grubba) | | // MOD_INT(1): POP_VALUE CONST0 // cf string % int ==> string
LSH_INT(0):
RSH_INT(0):
SUBTRACT_INT(0):
// ADD_INT(0): // cf string + int ==> string
AND_INT(0): POP_VALUE CONST0
AND_INT(-1):
OR_INT(0):
OR_INT(-1): POP_VALUE CONST_1
XOR_INT(0):
XOR_INT(-1): COMPL
// DIVIDE_INT(1): // cf string / int ==> array(string)
DIVIDE_INT(-1): NEGATE
// MULTIPLY_INT(0): POP_VALUE CONST0 // cf string * int ==> string
MULTIPLY_INT(1):
MULTIPLY_INT(-1): NEGATE
|
0a6746 | 2014-08-31 | Henrik Grubbström (Grubba) | |
|
396e26 | 2014-08-31 | Per Hedbor | | // this should be automatically const optimized, right?
// ADD_INTS ADD_INTS: ADD_INTS ($1a+$2a)
|
2c3055 | 2014-08-31 | Per Hedbor | |
|
754a05 | 2004-04-30 | Henrik Grubbström (Grubba) | | // This set of optimizations is broken. Consider the case:
// STRING ADD_INT ADD_INT
|
396e26 | 2014-08-31 | Per Hedbor | | // ADD_INT ADD_INT: ADD_INTS ($1a+$2a)
|
754a05 | 2004-04-30 | Henrik Grubbström (Grubba) | | // ADD_NEG_INT ADD_NEG_INT: ADD_NEG_INT ($1a+$2a)
// ADD_NEG_INT ADD_INT [$1a <= $2a]: ADD_INT ($2a-$1a)
// ADD_NEG_INT ADD_INT [$1a > $2a]: ADD_NEG_INT ($1a-$2a)
// ADD_INT ADD_NEG_INT [$2a <= $1a]: ADD_INT ($1a-$2a)
// ADD_INT ADD_NEG_INT [$2a > $1a]: ADD_NEG_INT ($2a-$1a)
|
403a53 | 2010-10-01 | Martin Stjernholm | | // FIXME: What about LTOSVAL_AND_FREE variants of the following three rules?
LTOSVAL2_AND_FREE ADD ASSIGN : ADD_TO
|
0cf410 | 2003-04-07 | Henrik Grubbström (Grubba) | | LTOSVAL ADD ASSIGN : ADD_TO
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | |
|
403a53 | 2010-10-01 | Martin Stjernholm | | LTOSVAL2_AND_FREE ADD_INTS ASSIGN : ADD_TO
|
0cf410 | 2003-04-07 | Henrik Grubbström (Grubba) | | LTOSVAL ADD_INTS ASSIGN : ADD_TO
|
a2b70a | 2000-04-30 | Fredrik Hübinette (Hubbe) | |
|
403a53 | 2010-10-01 | Martin Stjernholm | | LTOSVAL2_AND_FREE ADD_FLOATS ASSIGN : ADD_TO
|
0cf410 | 2003-04-07 | Henrik Grubbström (Grubba) | | LTOSVAL ADD_FLOATS ASSIGN : ADD_TO
LOCAL CONST1 ADD_TO : INC_LOCAL($1a)
LOCAL CONST_1 ADD_TO : DEC_LOCAL($1a)
ADD_TO POP_VALUE : ADD_TO_AND_POP
ASSIGN POP_VALUE : ASSIGN_AND_POP
|
a2b70a | 2000-04-30 | Fredrik Hübinette (Hubbe) | |
LOCAL CONST1 ADD_TO_AND_POP : INC_LOCAL_AND_POP($1a)
LOCAL CONST_1 ADD_TO_AND_POP : DEC_LOCAL_AND_POP($1a)
|
0cf410 | 2003-04-07 | Henrik Grubbström (Grubba) | | INC_LOCAL POP_VALUE : INC_LOCAL_AND_POP($1a)
DEC_LOCAL POP_VALUE : DEC_LOCAL_AND_POP($1a)
|
b4ce92 | 2001-05-13 | Fredrik Hübinette (Hubbe) | | #ifdef EAT_STACK
|
a96ce9 | 2000-04-19 | Fredrik Hübinette (Hubbe) | | APPLY ASSIGN_LOCAL_AND_POP : APPLY_ASSIGN_LOCAL_AND_POP($1a,$2a)
|
b4ce92 | 2001-05-13 | Fredrik Hübinette (Hubbe) | | #endif
|
0cf410 | 2003-04-07 | Henrik Grubbström (Grubba) | | ASSIGN_LOCAL_AND_POP INC_LOCAL($1a) : ADD_INT(1) ASSIGN_LOCAL($1a)
ASSIGN_LOCAL_AND_POP DEC_LOCAL($1a) : ADD_NEG_INT(1) ASSIGN_LOCAL($1a)
LOCAL RETURN : RETURN_LOCAL($1a)
LOCAL VOLATILE_RETURN : RETURN_LOCAL($1a)
|
0d80be | 2012-12-31 | Arne Goedeke | | NUMBER ADD_INT [ !INT32_ADD_OVERFLOW($1a, $2a) ] : NUMBER($1a+$2a)
NUMBER ADD_NEG_INT [ !INT32_SUB_OVERFLOW($1a, $2a) ]: NUMBER($1a-$2a)
|
c63dec | 2013-01-06 | Arne Goedeke | | NEG_NUMBER ADD_INT [ !INT32_SUB_OVERFLOW($2a, $1a) ]: NUMBER($2a-$1a)
NEG_NUMBER ADD_NEG_INT [ !INT32_NEG_OVERFLOW($1a) && !INT32_SUB_OVERFLOW(-$1a, $2a) ]: NUMBER(-$1a-$2a)
|
9b08a2 | 1998-03-31 | Fredrik Hübinette (Hubbe) | |
|
872aa2 | 2004-08-24 | Henrik Grubbström (Grubba) | | CONST0 ADD_INT : NUMBER($2a)
CONST0 ADD_NEG_INT : NEG_NUMBER($2a)
|
c63dec | 2013-01-06 | Arne Goedeke | | CONST1 ADD_INT [ !INT32_ADD_OVERFLOW($2a, 1) ] : NUMBER($2a+1)
CONST1 ADD_NEG_INT [ !INT32_SUB_OVERFLOW($2a, 1) ] : NEG_NUMBER($2a-1)
CONST_1 ADD_INT [ !INT32_SUB_OVERFLOW($2a, 1) ] : NUMBER($2a-1)
CONST_1 ADD_NEG_INT [ !INT32_ADD_OVERFLOW($2a, 1) && ($2a+1) > 0] : NEG_NUMBER($2a+1)
|
872aa2 | 2004-08-24 | Henrik Grubbström (Grubba) | | CONST0 LOCAL ADD_INTS : LOCAL($2a)
CONST0 LOCAL NEGATE ADD_INTS : LOCAL($2a) NEGATE
CONST0 GLOBAL ADD_INTS : GLOBAL($2a)
CONST0 GLOBAL NEGATE ADD_INTS : GLOBAL($2a) NEGATE
|
bd01ff | 2004-08-26 | Henrik Grubbström (Grubba) | | LOCAL ADD_INT LOCAL($1a) : LOCAL($1a) DUP ADD_INT($2a) SWAP
GLOBAL ADD_INT GLOBAL($1a) : GLOBAL($1a) DUP ADD_INT($2a) SWAP
LOCAL ADD_NEG_INT LOCAL($1a) : LOCAL($1a) DUP ADD_NEG_INT($2a) SWAP
GLOBAL ADD_NEG_INT GLOBAL($1a) : GLOBAL($1a) DUP ADD_NEG_INT($2a) SWAP
|
9b08a2 | 1998-03-31 | Fredrik Hübinette (Hubbe) | | LOCAL BRANCH_WHEN_NON_ZERO : BRANCH_IF_LOCAL($1a) POINTER($2a)
|
a7538d | 1998-05-12 | Fredrik Hübinette (Hubbe) | | LOCAL BRANCH_WHEN_ZERO : BRANCH_IF_NOT_LOCAL($1a) POINTER($2a)
|
9b08a2 | 1998-03-31 | Fredrik Hübinette (Hubbe) | |
|
99c1e9 | 2012-06-20 | Per Hedbor | | // quick_branch_when[_non]_zero _knows_ that the
// value on the stack is an integer.
GT BRANCH_WHEN_ZERO : GT QUICK_BRANCH_WHEN_ZERO($2a)
GE BRANCH_WHEN_ZERO : GE QUICK_BRANCH_WHEN_ZERO($2a)
LT BRANCH_WHEN_ZERO : LT QUICK_BRANCH_WHEN_ZERO($2a)
LE BRANCH_WHEN_ZERO : LE QUICK_BRANCH_WHEN_ZERO($2a)
|
8c4c53 | 2014-08-14 | Per Hedbor | | NE BRANCH_WHEN_ZERO : NE QUICK_BRANCH_WHEN_ZERO($2a)
EQ BRANCH_WHEN_ZERO : EQ QUICK_BRANCH_WHEN_ZERO($2a)
|
56aa1e | 2013-11-02 | Per Hedbor | | SIZEOF BRANCH_WHEN_ZERO : SIZEOF($1a) QUICK_BRANCH_WHEN_ZERO($2a)
|
fb9583 | 2013-11-02 | Per Hedbor | | SIZEOF_LOCAL BRANCH_WHEN_ZERO : SIZEOF_LOCAL($1a) QUICK_BRANCH_WHEN_ZERO($2a)
|
99c1e9 | 2012-06-20 | Per Hedbor | |
GT BRANCH_WHEN_NON_ZERO : GT QUICK_BRANCH_WHEN_NON_ZERO($2a)
GE BRANCH_WHEN_NON_ZERO : GE QUICK_BRANCH_WHEN_NON_ZERO($2a)
LT BRANCH_WHEN_NON_ZERO : LT QUICK_BRANCH_WHEN_NON_ZERO($2a)
LE BRANCH_WHEN_NON_ZERO : LE QUICK_BRANCH_WHEN_NON_ZERO($2a)
|
8c4c53 | 2014-08-14 | Per Hedbor | | NE BRANCH_WHEN_NON_ZERO : NE QUICK_BRANCH_WHEN_NON_ZERO($2a)
EQ BRANCH_WHEN_NON_ZERO : EQ QUICK_BRANCH_WHEN_NON_ZERO($2a)
|
56aa1e | 2013-11-02 | Per Hedbor | | SIZEOF BRANCH_WHEN_NON_ZERO : SIZEOF($1a) QUICK_BRANCH_WHEN_NON_ZERO($2a)
|
fb9583 | 2013-11-02 | Per Hedbor | | SIZEOF_LOCAL BRANCH_WHEN_NON_ZERO : SIZEOF_LOCAL($1a) QUICK_BRANCH_WHEN_NON_ZERO($2a)
|
99c1e9 | 2012-06-20 | Per Hedbor | |
// It is not really neccessary to set up a frame for these cases.
// Deluxe version: Also avoid the argument/local clearing, asm-level
// register pushing etc.
//
// These are functions returning a constant, and doing nothing else.
MARK_AT(0) POP_TO_MARK INIT_FRAME RETURN_0 : RETURN_0
|
5ea1d9 | 2012-06-22 | Per Hedbor | | MARK_AT(0) POP_TO_MARK INIT_FRAME UNDEFINED RETURN : UNDEFINED RETURN
|
99c1e9 | 2012-06-20 | Per Hedbor | | MARK_AT(0) POP_TO_MARK INIT_FRAME RETURN_1 : RETURN_1
|
055d2d | 2012-06-20 | Per Hedbor | | MARK_AT(0) POP_TO_MARK INIT_FRAME NUMBER RETURN : NUMBER($4a) RETURN
MARK_AT(0) POP_TO_MARK INIT_FRAME STRING RETURN : STRING($4a) RETURN
MARK_AT(0) POP_TO_MARK INIT_FRAME CONSTANT RETURN : CONSTANT($4a) RETURN
|
217cde | 2012-06-20 | Henrik Grubbström (Grubba) | | MARK_AT(0) POP_TO_MARK INIT_FRAME NEG_NUMBER RETURN : NEG_NUMBER($4a) RETURN
|
99c1e9 | 2012-06-20 | Per Hedbor | |
|
7a5c14 | 2000-08-22 | Henrik Grubbström (Grubba) | | // Branches that jump to the next instruction
// Basic branches
BRANCH LABEL($1a) : LABEL($1a)
|
f0e9e3 | 2001-01-15 | Martin Stjernholm | | BRANCH_WHEN_ZERO LABEL($1a) : POP_VALUE LABEL($1a)
BRANCH_WHEN_NON_ZERO LABEL($1a) : POP_VALUE LABEL($1a)
BRANCH_WHEN_EQ LABEL($1a) : POP_VALUE POP_VALUE LABEL($1a)
BRANCH_WHEN_NE LABEL($1a) : POP_VALUE POP_VALUE LABEL($1a)
BRANCH_WHEN_LT LABEL($1a) : POP_VALUE POP_VALUE LABEL($1a)
BRANCH_WHEN_LE LABEL($1a) : POP_VALUE POP_VALUE LABEL($1a)
BRANCH_WHEN_GT LABEL($1a) : POP_VALUE POP_VALUE LABEL($1a)
BRANCH_WHEN_GE LABEL($1a) : POP_VALUE POP_VALUE LABEL($1a)
|
7a5c14 | 2000-08-22 | Henrik Grubbström (Grubba) | | // These variants use a POINTER
BRANCH_IF_NOT_LOCAL_ARROW POINTER LABEL ($2a) : LABEL($2a)
BRANCH_IF_LOCAL POINTER LABEL($2a) : LABEL($2a)
BRANCH_IF_NOT_LOCAL POINTER LABEL($2a) : LABEL($2a)
|
928f95 | 2000-11-30 | Fredrik Hübinette (Hubbe) | | #define OPT_INCDEC(X) \
X##_LOCAL_AND_POP LOCAL ($1a) : X##_LOCAL ($1a) ; \
X##_LOCAL_AND_POP LOCAL LOCAL ($1a) : LOCAL($2a) X##_LOCAL ($1a) ; \
X##_LOCAL_AND_POP GLOBAL LOCAL ($1a) : GLOBAL($2a) X##_LOCAL ($1a) ;
OPT_INCDEC(INC)
OPT_INCDEC(DEC)
|
9b08a2 | 1998-03-31 | Fredrik Hübinette (Hubbe) | | ASSIGN_LOCAL_AND_POP LOCAL($1a) : ASSIGN_LOCAL($1a)
ASSIGN_GLOBAL_AND_POP GLOBAL($1a) : ASSIGN_GLOBAL($1a)
|
3336a0 | 2006-03-15 | Henrik Grubbström (Grubba) | | CLEAR_LOCAL LOCAL($1a) : CLEAR_LOCAL($1a) CONST0
|
b4ce92 | 2001-05-13 | Fredrik Hübinette (Hubbe) | | #ifdef EAT_STACK
|
a96ce9 | 2000-04-19 | Fredrik Hübinette (Hubbe) | | APPLY_ASSIGN_LOCAL_AND_POP LOCAL ($1b) : APPLY_ASSIGN_LOCAL($1a,$1b)
|
b4ce92 | 2001-05-13 | Fredrik Hübinette (Hubbe) | | #endif
|
9b08a2 | 1998-03-31 | Fredrik Hübinette (Hubbe) | |
|
872aa2 | 2004-08-24 | Henrik Grubbström (Grubba) | | DEC_LOCAL_AND_POP MARK_AND_LOCAL ($1a) : DEC_LOCAL ($1a) MARK_X(1)
INC_LOCAL_AND_POP MARK_AND_LOCAL ($1a) : INC_LOCAL ($1a) MARK_X(1)
ASSIGN_GLOBAL_AND_POP MARK GLOBAL($1a) : ASSIGN_GLOBAL($1a) MARK_X(1)
ASSIGN_LOCAL_AND_POP MARK_AND_LOCAL($1a) : ASSIGN_LOCAL($1a) MARK_X(1)
|
bd01ff | 2004-08-26 | Henrik Grubbström (Grubba) | | ASSIGN_LOCAL_AND_POP NUMBER LOCAL($1a) : ASSIGN_LOCAL($1a) NUMBER($2a) SWAP
ASSIGN_LOCAL_AND_POP STRING LOCAL($1a) : ASSIGN_LOCAL($1a) STRING($2a) SWAP
ASSIGN_LOCAL_AND_POP MARK_AND_STRING LOCAL($1a) : ASSIGN_LOCAL($1a) STRING($2a) SWAP MARK_X(2)
|
b4ce92 | 2001-05-13 | Fredrik Hübinette (Hubbe) | | #ifdef EAT_STACK
|
872aa2 | 2004-08-24 | Henrik Grubbström (Grubba) | | APPLY_ASSIGN_LOCAL_AND_POP MARK_AND_LOCAL ($1b) : APPLY_ASSIGN_LOCAL($1a,$1b) MARK_X(1)
|
b4ce92 | 2001-05-13 | Fredrik Hübinette (Hubbe) | | #endif
|
9b08a2 | 1998-03-31 | Fredrik Hübinette (Hubbe) | |
ASSIGN_LOCAL ASSIGN_LOCAL($1a) : ASSIGN_LOCAL($1a)
|
872aa2 | 2004-08-24 | Henrik Grubbström (Grubba) | | #if 0
// The following set of rules attempt to push the mark toward the apply.
// The idea is to push it the entire way, to be able to have an apply
// opcode that contains the stack depth, and thus doesn't need the mark
// stack.
// MARK rules
MARK LOCAL : LOCAL($2a) MARK_X(1)
MARK STRING : STRING($2a) MARK_X(1)
MARK NUMBER : NUMBER($2a) MARK_X(1)
MARK CONST0 : CONST0 MARK_X(1)
MARK CONST1 : CONST1 MARK_X(1)
MARK CONST_1 : CONST_1 MARK_X(1)
MARK NEG_NUMBER : NEG_NUMBER($2a) MARK_X(1)
MARK GLOBAL : GLOBAL($2a) MARK_X(1)
MARK MARK_APPLY : MARK_APPLY($2a) MARK_X(1)
MARK CONSTANT : CONSTANT($2a) MARK_X(1)
//MARK FLOAT : FLOAT($2a) MARK_X(1)
MARK LFUN : LFUN($2a) MARK_X(1)
MARK LTOSVAL : LTOSVAL MARK_X(1)
MARK LOCAL_LVALUE : LOCAL_LVALUE($2a) MARK_X(2)
MARK 2_LOCALS : 2_LOCALS($2a,$2b) MARK_X(2)
MARK NEGATE : NEGATE MARK
// MARK_X rules
MARK_X(0) : MARK
MARK_X LOCAL : LOCAL($2a) MARK_X($1a+1)
MARK_X STRING : STRING($2a) MARK_X($1a+1)
MARK_X NUMBER : NUMBER($2a) MARK_X($1a+1)
MARK_X CONST0 : CONST0 MARK_X($1a+1)
MARK_X CONST1 : CONST1 MARK_X($1a+1)
MARK_X CONST_1 : CONST_1 MARK_X($1a+1)
MARK_X NEG_NUMBER : NEG_NUMBER($2a) MARK_X($1a+1)
MARK_X GLOBAL : GLOBAL($2a) MARK_X($1a+1)
MARK_X MARK_APPLY : MARK_APPLY($2a) MARK_X($1a+1)
MARK_X CONSTANT : CONSTANT($2a) MARK_X($1a+1)
//MARK_X FLOAT : FLOAT($2a) MARK_X($1a+1)
MARK_X LFUN : LFUN($2a) MARK_X($1a+1)
MARK_X LTOSVAL : LTOSVAL MARK_X($1a+1)
MARK_X LOCAL_LVALUE : LOCAL_LVALUE($2a) MARK_X($1a+2)
MARK_X 2_LOCALS : 2_LOCALS($2a,$2b) MARK_X($1a+2)
MARK_X NEGATE : NEGATE MARK_X($1a)
#else /* !0 */
|
596e36 | 1998-03-31 | Fredrik Hübinette (Hubbe) | | // MARK_X rules
|
9b08a2 | 1998-03-31 | Fredrik Hübinette (Hubbe) | | MARK_X(0) : MARK
LOCAL MARK_X [$2a>0] : MARK_X($2a-1) LOCAL($1a)
STRING MARK_X [$2a>0] : MARK_X($2a-1) STRING($1a)
NUMBER MARK_X [$2a>0] : MARK_X($2a-1) NUMBER($1a)
CONST0 MARK_X [$2a>0] : MARK_X($2a-1) CONST0
CONST1 MARK_X [$2a>0] : MARK_X($2a-1) CONST1
CONST_1 MARK_X [$2a>0] : MARK_X($2a-1) CONST_1
NEG_NUMBER MARK_X [$2a>0] : MARK_X($2a-1) NEG_NUMBER($1a)
GLOBAL MARK_X [$2a>0] : MARK_X($2a-1) GLOBAL($1a)
MARK_APPLY MARK_X [$2a>0] : MARK_X($2a-1) MARK_APPLY($1a)
CONSTANT MARK_X [$2a>0] : MARK_X($2a-1) CONSTANT($1a)
|
872aa2 | 2004-08-24 | Henrik Grubbström (Grubba) | | //FLOAT MARK_X [$2a>0] : MARK_X($2a-1) FLOAT($1a)
|
9b08a2 | 1998-03-31 | Fredrik Hübinette (Hubbe) | | LFUN MARK_X [$2a>0] : MARK_X($2a-1) LFUN($1a)
LTOSVAL MARK_X [$2a>0] : MARK_X($2a-1) LTOSVAL
LOCAL_LVALUE MARK_X [$2a>1] : MARK_X($2a-2) LOCAL_LVALUE($1a)
|
a96ce9 | 2000-04-19 | Fredrik Hübinette (Hubbe) | | 2_LOCALS MARK_X [$2a>0] : LOCAL($1a) MARK_X($2a-1) LOCAL($1b)
|
bd01ff | 2004-08-26 | Henrik Grubbström (Grubba) | | SWAP MARK_X : MARK_X($2a) SWAP
DUP MARK_X [$2a>0] : MARK_X($2a-1) DUP
|
596e36 | 1998-03-31 | Fredrik Hübinette (Hubbe) | |
|
872aa2 | 2004-08-24 | Henrik Grubbström (Grubba) | | CONST_1 ASSIGN_LOCAL MARK_X [$3a>0] : MARK_X($3a-1) CONST_1 ASSIGN_LOCAL($2a)
CONST1 ASSIGN_LOCAL MARK_X [$3a>0] : MARK_X($3a-1) CONST1 ASSIGN_LOCAL($2a)
NUMBER ASSIGN_LOCAL MARK_X [$3a>0] : MARK_X($3a-1) NUMBER($1a) ASSIGN_LOCAL($2a)
NEG_NUMBER ASSIGN_LOCAL MARK_X [$3a>0] : MARK_X($3a-1) NEG_NUMBER($1a) ASSIGN_LOCAL($2a)
#endif /* 0 */
MARK_X [$1a>0] POP_VALUE : POP_VALUE MARK_X($1a-1)
MARK_X POP_N_ELEMS [$1a >= $2a] : POP_N_ELEMS($2a) MARK_X($1a-$2a)
|
596e36 | 1998-03-31 | Fredrik Hübinette (Hubbe) | | #define BasicBranch2(Branch,Oper,Pre,Post,Variable) \
Variable Branch Pre Variable ($1a) : Variable ($1a) Oper ($2a) Post ; \
ASSIGN_##Variable Branch Pre Variable ($1a) : ASSIGN_##Variable($1a) Oper ($2a) Post ;
#define BasicBranch1(Branch,Oper,Pre,Post) \
BasicBranch2(Branch,Oper,Pre,Post,LOCAL) \
BasicBranch2(Branch,Oper,Pre,Post,GLOBAL)
#define BasicBranch0(Branch,Oper) \
BasicBranch1(Branch,Oper,MARK,MARK_X(1)) \
BasicBranch1(Branch,Oper, , )
BasicBranch0(BRANCH_WHEN_NON_ZERO, BRANCH_AND_POP_WHEN_NON_ZERO)
BasicBranch0(BRANCH_WHEN_ZERO, BRANCH_AND_POP_WHEN_ZERO)
|
a7538d | 1998-05-12 | Fredrik Hübinette (Hubbe) | |
|
dbd32e | 2000-04-26 | Fredrik Hübinette (Hubbe) | | #define SimpleBranch(Sequence,X) \
Sequence BRANCH_WHEN_ZERO Sequence : Sequence BRANCH_AND_POP_WHEN_ZERO ( X ) ; \
Sequence BRANCH_WHEN_ZERO MARK Sequence : Sequence BRANCH_AND_POP_WHEN_ZERO ( X ) MARK_X(1) ;
SimpleBranch( LOCAL_ARROW($1a, $1b), $2a )
SimpleBranch( LOCAL_ARROW($1a, $1b) ARROW($2a), $3a )
SimpleBranch( LOCAL_ARROW($1a, $1b) ARROW($2a) ARROW($3a), $4a )
SimpleBranch( LOCAL_ARROW($1a, $1b) ARROW($2a) ARROW($3a) ARROW($4a), $5a )
|
50d1d6 | 2000-04-30 | Fredrik Hübinette (Hubbe) | | SimpleBranch( GLOBAL_LOCAL_INDEX($1a, $1b) , $2a )
SimpleBranch( LOCAL_LOCAL_INDEX($1a, $1b) , $2a )
|
dbd32e | 2000-04-26 | Fredrik Hübinette (Hubbe) | |
SimpleBranch( GLOBAL($1a) ARROW ($2a), $3a )
|
a96ce9 | 2000-04-19 | Fredrik Hübinette (Hubbe) | | LOCAL ASSIGN_LOCAL_AND_POP : LOCAL_2_LOCAL($2a,$1a)
GLOBAL ASSIGN_LOCAL_AND_POP : GLOBAL_2_LOCAL($1a,$2a)
LOCAL ASSIGN_GLOBAL_AND_POP : LOCAL_2_GLOBAL($2a,$1a)
|
a7538d | 1998-05-12 | Fredrik Hübinette (Hubbe) | |
|
6d678b | 2014-08-07 | Per Hedbor | | ASSIGN_PRIVATE_GLOBAL_AND_POP PRIVATE_GLOBAL($1a) : ASSIGN_PRIVATE_GLOBAL($1a)
|
8c4c53 | 2014-08-14 | Per Hedbor | | ASSIGN_PRIVATE_TYPED_GLOBAL_AND_POP PRIVATE_TYPED_GLOBAL($1a) : ASSIGN_PRIVATE_TYPED_GLOBAL($1a,$1b)
|
6d678b | 2014-08-07 | Per Hedbor | | ASSIGN_GLOBAL_AND_POP GLOBAL($1a) : ASSIGN_GLOBAL($1a)
ASSIGN_LOCAL_AND_POP LOCAL($1a) : ASSIGN_LOCAL($1a)
|
a96ce9 | 2000-04-19 | Fredrik Hübinette (Hubbe) | | LOCAL ARROW : LOCAL_ARROW($2a,$1a)
LOCAL_ARROW BRANCH_WHEN_ZERO: BRANCH_IF_NOT_LOCAL_ARROW($1a,$1b) POINTER($2a)
|
a7538d | 1998-05-12 | Fredrik Hübinette (Hubbe) | |
|
a96ce9 | 2000-04-19 | Fredrik Hübinette (Hubbe) | | GLOBAL LOCAL_INDEX : GLOBAL_LOCAL_INDEX($1a,$2a)
|
a7538d | 1998-05-12 | Fredrik Hübinette (Hubbe) | |
SIZEOF CONST1 BRANCH_WHEN_LT : SIZEOF BRANCH_WHEN_ZERO ($3a)
|
82f8ee | 1998-05-22 | Fredrik Hübinette (Hubbe) | | SIZEOF_LOCAL CONST1 BRANCH_WHEN_LT : SIZEOF_LOCAL($1a) BRANCH_WHEN_ZERO ($3a)
|
a7538d | 1998-05-12 | Fredrik Hübinette (Hubbe) | | SIZEOF CONST0 BRANCH_WHEN_LE : SIZEOF BRANCH_WHEN_ZERO ($3a)
|
82f8ee | 1998-05-22 | Fredrik Hübinette (Hubbe) | | SIZEOF_LOCAL CONST0 BRANCH_WHEN_LE : SIZEOF_LOCAL($1a) BRANCH_WHEN_ZERO ($3a)
|
dd7620 | 1998-05-13 | Fredrik Hübinette (Hubbe) | |
CLEAR_LOCAL DEC_LOCAL_AND_POP($1a) : CONST_1 ASSIGN_LOCAL_AND_POP($1a)
CLEAR_LOCAL INC_LOCAL_AND_POP($1a) : CONST1 ASSIGN_LOCAL_AND_POP($1a)
|
48073b | 1998-09-01 | Fredrik Hübinette (Hubbe) | |
|
0a6746 | 2014-08-31 | Henrik Grubbström (Grubba) | | // Popping of side-effect free values.
|
48073b | 1998-09-01 | Fredrik Hübinette (Hubbe) | | NUMBER POP_VALUE :
|
0a6746 | 2014-08-31 | Henrik Grubbström (Grubba) | | NEG_NUMBER POP_VALUE:
|
48073b | 1998-09-01 | Fredrik Hübinette (Hubbe) | | STRING POP_VALUE :
|
24f546 | 2003-12-03 | Henrik Grubbström (Grubba) | | //FLOAT POP_VALUE :
|
48073b | 1998-09-01 | Fredrik Hübinette (Hubbe) | | CONSTANT POP_VALUE :
LOCAL POP_VALUE :
|
0a6746 | 2014-08-31 | Henrik Grubbström (Grubba) | | GLOBAL POP_VALUE:
|
8c4c53 | 2014-08-14 | Per Hedbor | | PRIVATE_GLOBAL POP_VALUE :
PRIVATE_TYPED_GLOBAL POP_VALUE :
|
0a6746 | 2014-08-31 | Henrik Grubbström (Grubba) | | 2_LOCALS POP_VALUE: LOCAL($1a)
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | TRAMPOLINE POP_VALUE :
|
0a6746 | 2014-08-31 | Henrik Grubbström (Grubba) | | CONST0 POP_VALUE:
CONST1 POP_VALUE:
CONST_1 POP_VALUE:
BIGNUM POP_VALUE:
MOD_INT POP_VALUE: POP_VALUE
LSH_INT POP_VALUE: POP_VALUE
RSH_INT POP_VALUE: POP_VALUE
SUBTRACT_INT POP_VALUE: POP_VALUE
ADD_INT POP_VALUE: POP_VALUE
AND_INT POP_VALUE: POP_VALUE
OR_INT POP_VALUE: POP_VALUE
XOR_INT POP_VALUE: POP_VALUE
DIVIDE_INT POP_VALUE: POP_VALUE
MULTIPLY_INT POP_VALUE: POP_VALUE
NUMBER POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
NEG_NUMBER POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
STRING POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
//FLOAT POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
CONSTANT POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
LOCAL POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
GLOBAL POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
PRIVATE_GLOBAL POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
PRIVATE_TYPED_GLOBAL POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
2_LOCALS POP_N_ELEMS [$2a > 0]: LOCAL($1a) POP_N_ELEMS($2a-1)
TRAMPOLINE POP_N_ELEMS [$2a > 0]: LOCAL($1a) POP_N_ELEMS($2a-1)
CONST0 POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
CONST1 POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
CONST_1 POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
BIGNUM POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
|
1edc90 | 2014-09-01 | Per Hedbor | | MOD_INT POP_N_ELEMS[$2a > 0]: POP_N_ELEMS($2a)
LSH_INT POP_N_ELEMS[$2a > 0]: POP_N_ELEMS($2a)
RSH_INT POP_N_ELEMS[$2a > 0]: POP_N_ELEMS($2a)
SUBTRACT_INT POP_N_ELEMS[$2a > 0]: POP_N_ELEMS($2a)
ADD_INT POP_N_ELEMS[$2a > 0]: POP_N_ELEMS($2a)
ADD_NEG_INT POP_N_ELEMS[$2a > 0]: POP_N_ELEMS($2a)
AND_INT POP_N_ELEMS[$2a > 0]: POP_N_ELEMS($2a)
OR_INT POP_N_ELEMS[$2a > 0]: POP_N_ELEMS($2a)
XOR_INT POP_N_ELEMS[$2a > 0]: POP_N_ELEMS($2a)
DIVIDE_INT POP_N_ELEMS[$2a > 0]: POP_N_ELEMS($2a)
MULTIPLY_INT POP_N_ELEMS[$2a > 0]: POP_N_ELEMS($2a)
|
6fd517 | 2000-04-25 | Fredrik Hübinette (Hubbe) | |
|
d4a136 | 2001-02-09 | Fredrik Hübinette (Hubbe) | | RECUR RETURN [check_tailrecursion()] : TAIL_RECUR ($1a)
|
873ceb | 2000-04-30 | Fredrik Hübinette (Hubbe) | |
// This doesn't really work
|
8c4c53 | 2014-08-14 | Per Hedbor | | // MARK TAIL_RECUR : BRANCH ($2a)
// These optimizations are now handled in optimize_eq
// CONST0 BRANCH_WHEN_EQ: BRANCH_WHEN_ZERO($2a)
// CONST0 BRANCH_WHEN_NE: BRANCH_WHEN_NON_ZERO($2a)
//
// This one is not safe.
// CONST0 EQ: NOT
|
263ea3 | 2014-08-18 | Per Hedbor | | // These are known to always return integers.
ZERO_TYPE BRANCH_WHEN_ZERO: ZERO_TYPE QUICK_BRANCH_WHEN_ZERO($2a)
ZERO_TYPE BRANCH_WHEN_NON_ZERO: ZERO_TYPE QUICK_BRANCH_WHEN_NON_ZERO($2a)
UNDEFINEDP BRANCH_WHEN_ZERO: UNDEFINEDP QUICK_BRANCH_WHEN_ZERO($2a)
UNDEFINEDP BRANCH_WHEN_NON_ZERO: UNDEFINEDP QUICK_BRANCH_WHEN_NON_ZERO($2a)
DESTRUCTEDP BRANCH_WHEN_ZERO: UNDEFINEDP QUICK_BRANCH_WHEN_ZERO($2a)
DESTRUCTEDP BRANCH_WHEN_NON_ZERO: UNDEFINEDP QUICK_BRANCH_WHEN_NON_ZERO($2a)
|
8c4c53 | 2014-08-14 | Per Hedbor | | BRANCH_WHEN_EQ: EQ QUICK_BRANCH_WHEN_NON_ZERO($1a)
BRANCH_WHEN_NE: EQ QUICK_BRANCH_WHEN_ZERO($1a)
BRANCH_WHEN_LT: LT QUICK_BRANCH_WHEN_NON_ZERO($1a)
BRANCH_WHEN_GT: GT QUICK_BRANCH_WHEN_NON_ZERO($1a)
BRANCH_WHEN_LE: LE QUICK_BRANCH_WHEN_NON_ZERO($1a)
BRANCH_WHEN_GE: GE QUICK_BRANCH_WHEN_NON_ZERO($1a)
|
dbd32e | 2000-04-26 | Fredrik Hübinette (Hubbe) | |
|
bf7e09 | 2000-04-30 | Martin Nilsson | | ASSIGN_LOCAL BRANCH_WHEN_ZERO 2_LOCALS(,$1a) BRANCH_WHEN_EQ : ASSIGN_LOCAL($1a) BRANCH_AND_POP_WHEN_ZERO($2a) LOCAL($3a) BRANCH_WHEN_EQ($4a)
ASSIGN_LOCAL BRANCH_WHEN_ZERO 2_LOCALS(,$1a) BRANCH_WHEN_NE : ASSIGN_LOCAL($1a) BRANCH_AND_POP_WHEN_ZERO($2a) LOCAL($3a) BRANCH_WHEN_NE($4a)
|
dbd32e | 2000-04-26 | Fredrik Hübinette (Hubbe) | |
/* This will facilitate other optimizations I hope */
CLEAR_LOCAL MARK LOCAL [ $1a != $3a ] : MARK LOCAL($3a) CLEAR_LOCAL($1a)
/* The result of this optimization could be reordered... */
CLEAR_LOCAL MARK LOCAL($1a) : MARK CLEAR_LOCAL($1a) CONST0
|
70be66 | 2001-06-19 | Fredrik Hübinette (Hubbe) | |
#define LOW_MKCALLOPTS(A) \
A POP_VALUE: A##_AND_POP($1a); \
|
395899 | 2001-06-23 | Fredrik Hübinette (Hubbe) | | A [ check_tailrecursion() ] RETURN : A##_AND_RETURN($1a) ; \
A##_AND_RETURN ? DeadCodeEndCond($2o) : A##_AND_RETURN($1a) ;
|
70be66 | 2001-06-19 | Fredrik Hübinette (Hubbe) | |
#define MKCALLOPTS(A) \
MARK A: MARK_##A($2a) ; \
|
a875bc | 2014-08-15 | Henrik Grubbström (Grubba) | | MARK_X A: A##_N($2a,$1a); \
|
70be66 | 2001-06-19 | Fredrik Hübinette (Hubbe) | | LOW_MKCALLOPTS(A); \
|
a875bc | 2014-08-15 | Henrik Grubbström (Grubba) | | A##_N[!$1b]:MARK_##A($1a); \
|
70be66 | 2001-06-19 | Fredrik Hübinette (Hubbe) | | LOW_MKCALLOPTS(MARK_##A);
MKCALLOPTS(APPLY)
MKCALLOPTS(CALL_LFUN)
MKCALLOPTS(CALL_BUILTIN)
|
bfe273 | 2001-08-15 | Fredrik Hübinette (Hubbe) | | // MARK CALL_FUNCTION doesn't make any sense...
LOW_MKCALLOPTS(CALL_FUNCTION)
|
70be66 | 2001-06-19 | Fredrik Hübinette (Hubbe) | |
|
a8aed2 | 2001-08-15 | Fredrik Hübinette (Hubbe) | | // MARK CALL_OTHER doesn't make any sense either...
LOW_MKCALLOPTS(CALL_OTHER)
|
d9a93b | 2001-07-01 | Fredrik Hübinette (Hubbe) | | CALL_BUILTIN1 POP_VALUE : CALL_BUILTIN1_AND_POP ($1a)
|
c67429 | 2008-01-29 | Henrik Grubbström (Grubba) | | LTOSVAL_CALL_BUILTIN_AND_ASSIGN POP_VALUE : LTOSVAL_CALL_BUILTIN_AND_ASSIGN_POP($1a)
|
d9a93b | 2001-07-01 | Fredrik Hübinette (Hubbe) | | #define OPT_TYPEP(X,Y) \
CALL_BUILTIN1 [ Pike_compiler->new_program->constants[$1a].sval.u.efun->function == X ] BRANCH_WHEN_ZERO : BRANCH_IF_TYPE_IS_NOT(Y) POINTER($2a);
#if 1
OPT_TYPEP(f_intp, T_INT)
OPT_TYPEP(f_stringp, T_STRING)
OPT_TYPEP(f_arrayp, T_ARRAY)
OPT_TYPEP(f_floatp, T_FLOAT)
OPT_TYPEP(f_mappingp, T_MAPPING)
OPT_TYPEP(f_multisetp, T_MULTISET)
#endif
|
5016a9 | 2004-08-23 | Henrik Grubbström (Grubba) | | // Move lvalues up on the stack.
|
3f1dd5 | 2004-08-24 | Henrik Grubbström (Grubba) | | #define MOVE_LVAL(L_G1, L_G2) \
NUMBER ASSIGN_##L_G1##_AND_POP L_G2##_LVALUE: L_G2##_LVALUE($3a) NUMBER($1a) ASSIGN_##L_G1##_AND_POP($2a); \
NEG_NUMBER ASSIGN_##L_G1##_AND_POP L_G2##_LVALUE: L_G2##_LVALUE($3a) NEG_NUMBER($1a) ASSIGN_##L_G1##_AND_POP($2a); \
CONST1 ASSIGN_##L_G1##_AND_POP L_G2##_LVALUE: L_G2##_LVALUE($3a) CONST1 ASSIGN_##L_G1##_AND_POP($2a); \
CONST_1 ASSIGN_##L_G1##_AND_POP L_G2##_LVALUE: L_G2##_LVALUE($3a) CONST_1 ASSIGN_##L_G1##_AND_POP($2a);
MOVE_LVAL(LOCAL,LOCAL)
MOVE_LVAL(GLOBAL,LOCAL)
MOVE_LVAL(LOCAL,GLOBAL)
MOVE_LVAL(GLOBAL,GLOBAL)
CLEAR_LOCAL LOCAL_LVALUE: LOCAL_LVALUE($2a) CLEAR_LOCAL($1a)
CLEAR_LOCAL GLOBAL_LVALUE: GLOBAL_LVALUE($2a) CLEAR_LOCAL($1a)
CONST0 ASSIGN_GLOBAL_AND_POP LOCAL_LVALUE: LOCAL_LVALUE($3a) CONST0 ASSIGN_GLOBAL_AND_POP($2a)
CONST0 ASSIGN_GLOBAL_AND_POP GLOBAL_LVALUE: GLOBAL_LVALUE($3a) CONST0 ASSIGN_GLOBAL_AND_POP($2a)
GLOBAL_LVALUE CONST0 ASSIGN_GLOBAL_AND_POP($1a) INC_AND_POP : CONST1 ASSIGN_GLOBAL_AND_POP($1a)
GLOBAL_LVALUE CONST0 ASSIGN_GLOBAL_AND_POP($1a) DEC_AND_POP : CONST_1 ASSIGN_GLOBAL_AND_POP($1a)
GLOBAL_LVALUE CONST_1 ASSIGN_GLOBAL_AND_POP($1a) INC_AND_POP : CONST0 ASSIGN_GLOBAL_AND_POP($1a)
GLOBAL_LVALUE CONST1 ASSIGN_GLOBAL_AND_POP($1a) DEC_AND_POP : CONST0 ASSIGN_GLOBAL_AND_POP($1a)
GLOBAL_LVALUE NUMBER ASSIGN_GLOBAL_AND_POP($1a) INC_AND_POP : NUMBER($2a) ADD_INT(1) ASSIGN_GLOBAL_AND_POP($1a)
GLOBAL_LVALUE NUMBER ASSIGN_GLOBAL_AND_POP($1a) DEC_AND_POP : NUMBER($2a) ADD_NEG_INT(1) ASSIGN_GLOBAL_AND_POP($1a)
GLOBAL_LVALUE NEG_NUMBER ASSIGN_GLOBAL_AND_POP($1a) INC_AND_POP : NEG_NUMBER($2a) ADD_INT(1) ASSIGN_GLOBAL_AND_POP($1a)
GLOBAL_LVALUE NEG_NUMBER ASSIGN_GLOBAL_AND_POP($1a) DEC_AND_POP : NEG_NUMBER($2a) ADD_NEG_INT(1) ASSIGN_GLOBAL_AND_POP($1a)
|
5016a9 | 2004-08-23 | Henrik Grubbström (Grubba) | |
// Move marks to where they're relevant.
MARK CLEAR_LOCAL: CLEAR_LOCAL($2a) MARK
|
f79cff | 2013-02-04 | Henrik Grubbström (Grubba) | | MARK ASSIGN_LOCAL_NUMBER_AND_POP: ASSIGN_LOCAL_NUMBER_AND_POP($2a,$2b) MARK
MARK ASSIGN_GLOBAL_NUMBER_AND_POP: ASSIGN_GLOBAL_NUMBER_AND_POP($2a,$2b) MARK
|
5016a9 | 2004-08-23 | Henrik Grubbström (Grubba) | | MARK NEG_NUMBER ASSIGN_LOCAL_AND_POP: NEG_NUMBER($2a) ASSIGN_LOCAL_AND_POP($3a) MARK
MARK NEG_NUMBER ASSIGN_GLOBAL_AND_POP: NEG_NUMBER($2a) ASSIGN_GLOBAL_AND_POP($3a) MARK
|
872aa2 | 2004-08-24 | Henrik Grubbström (Grubba) | | MARK_AND_CONST1 ASSIGN_LOCAL_AND_POP: CONST1 ASSIGN_LOCAL_AND_POP($3a) MARK
MARK_AND_CONST1 ASSIGN_GLOBAL_AND_POP: CONST1 ASSIGN_GLOBAL_AND_POP($3a) MARK
|
5016a9 | 2004-08-23 | Henrik Grubbström (Grubba) | | MARK CONST_1 ASSIGN_LOCAL_AND_POP: CONST_1 ASSIGN_LOCAL_AND_POP($3a) MARK
MARK CONST_1 ASSIGN_GLOBAL_AND_POP: CONST_1 ASSIGN_GLOBAL_AND_POP($3a) MARK
|
3f1dd5 | 2004-08-24 | Henrik Grubbström (Grubba) | | CONST_1 COMPL : CONST0
CONST_1 ASSIGN_LOCAL COMPL : CONST_1 ASSIGN_LOCAL_AND_POP($2a) CONST0
CONST_1 ASSIGN_GLOBAL COMPL : CONST_1 ASSIGN_GLOBAL_AND_POP($2a) CONST0
CONST0 COMPL : CONST_1
CONST0 ASSIGN_LOCAL COMPL : CLEAR_LOCAL($2a) CONST_1
CONST0 ASSIGN_GLOBAL COMPL : CONST0 ASSIGN_GLOBAL_AND_POP($2a) CONST_1
|