tiny performance tweaks: removing some variables, making some static
This commit is contained in:
		
							parent
							
								
									27a3e413d3
								
							
						
					
					
						commit
						943c0d71d1
					
				| 
						 | 
					@ -819,12 +819,12 @@ static value_t apply_cl(uint32_t nargs)
 | 
				
			||||||
    uint8_t *code;
 | 
					    uint8_t *code;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // temporary variables (not necessary to preserve across calls)
 | 
					    // temporary variables (not necessary to preserve across calls)
 | 
				
			||||||
    uint32_t op, envsz;
 | 
					    uint32_t op;
 | 
				
			||||||
    int64_t accum;
 | 
					 | 
				
			||||||
    symbol_t *sym;
 | 
					    symbol_t *sym;
 | 
				
			||||||
    cons_t *c;
 | 
					    static cons_t *c;
 | 
				
			||||||
    value_t func, v, x, e;
 | 
					    static value_t *pv;
 | 
				
			||||||
    value_t *lenv, *pv;
 | 
					    static int64_t accum;
 | 
				
			||||||
 | 
					    static value_t func, v, e;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 apply_cl_top:
 | 
					 apply_cl_top:
 | 
				
			||||||
    captured = 0;
 | 
					    captured = 0;
 | 
				
			||||||
| 
						 | 
					@ -883,7 +883,7 @@ static value_t apply_cl(uint32_t nargs)
 | 
				
			||||||
        case OP_LVARGC:
 | 
					        case OP_LVARGC:
 | 
				
			||||||
            // move extra arguments from list to stack
 | 
					            // move extra arguments from list to stack
 | 
				
			||||||
            i = GET_UINT32(code, ip); ip+=4;
 | 
					            i = GET_UINT32(code, ip); ip+=4;
 | 
				
			||||||
            x = POP();  // cloenv
 | 
					            e = POP();  // cloenv
 | 
				
			||||||
            if (nargs > MAX_ARGS) {
 | 
					            if (nargs > MAX_ARGS) {
 | 
				
			||||||
                v = POP();  // list of rest args
 | 
					                v = POP();  // list of rest args
 | 
				
			||||||
                nargs--;
 | 
					                nargs--;
 | 
				
			||||||
| 
						 | 
					@ -904,7 +904,7 @@ static value_t apply_cl(uint32_t nargs)
 | 
				
			||||||
                if (iscons(v))
 | 
					                if (iscons(v))
 | 
				
			||||||
                    lerror(ArgError, "apply: too many arguments");
 | 
					                    lerror(ArgError, "apply: too many arguments");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            PUSH(x);
 | 
					            PUSH(e);
 | 
				
			||||||
            goto next_op;
 | 
					            goto next_op;
 | 
				
			||||||
        case OP_LET:
 | 
					        case OP_LET:
 | 
				
			||||||
            // last arg is closure environment to use
 | 
					            // last arg is closure environment to use
 | 
				
			||||||
| 
						 | 
					@ -1396,10 +1396,10 @@ static value_t apply_cl(uint32_t nargs)
 | 
				
			||||||
            assert(nargs > 0);
 | 
					            assert(nargs > 0);
 | 
				
			||||||
            i = code[ip++];
 | 
					            i = code[ip++];
 | 
				
			||||||
            if (captured) {
 | 
					            if (captured) {
 | 
				
			||||||
                x = Stack[bp];
 | 
					                e = Stack[bp];
 | 
				
			||||||
                assert(isvector(x));
 | 
					                assert(isvector(e));
 | 
				
			||||||
                assert(i < vector_size(x));
 | 
					                assert(i < vector_size(e));
 | 
				
			||||||
                v = vector_elt(x, i);
 | 
					                v = vector_elt(e, i);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else {
 | 
					            else {
 | 
				
			||||||
                assert(bp+i < SP);
 | 
					                assert(bp+i < SP);
 | 
				
			||||||
| 
						 | 
					@ -1435,10 +1435,10 @@ static value_t apply_cl(uint32_t nargs)
 | 
				
			||||||
            v = Stack[SP-1];
 | 
					            v = Stack[SP-1];
 | 
				
			||||||
            i = code[ip++];
 | 
					            i = code[ip++];
 | 
				
			||||||
            if (captured) {
 | 
					            if (captured) {
 | 
				
			||||||
                x = Stack[bp];
 | 
					                e = Stack[bp];
 | 
				
			||||||
                assert(isvector(x));
 | 
					                assert(isvector(e));
 | 
				
			||||||
                assert(i < vector_size(x));
 | 
					                assert(i < vector_size(e));
 | 
				
			||||||
                vector_elt(x, i) = v;
 | 
					                vector_elt(e, i) = v;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else {
 | 
					            else {
 | 
				
			||||||
                assert(bp+i < SP);
 | 
					                assert(bp+i < SP);
 | 
				
			||||||
| 
						 | 
					@ -1492,14 +1492,15 @@ static value_t apply_cl(uint32_t nargs)
 | 
				
			||||||
            // build a closure (lambda args body . env)
 | 
					            // build a closure (lambda args body . env)
 | 
				
			||||||
            if (nargs > 0 && !captured) {
 | 
					            if (nargs > 0 && !captured) {
 | 
				
			||||||
                // save temporary environment to the heap
 | 
					                // save temporary environment to the heap
 | 
				
			||||||
                lenv = &Stack[bp];
 | 
					                //lenv = &Stack[bp];
 | 
				
			||||||
                envsz = nargs+1;
 | 
					                n = nargs;
 | 
				
			||||||
                pv = alloc_words(envsz + 1);
 | 
					                pv = alloc_words(n + 2);
 | 
				
			||||||
                PUSH(tagptr(pv, TAG_VECTOR));
 | 
					                PUSH(tagptr(pv, TAG_VECTOR));
 | 
				
			||||||
                pv[0] = fixnum(envsz);
 | 
					                pv[0] = fixnum(n+1);
 | 
				
			||||||
                pv++;
 | 
					                pv++;
 | 
				
			||||||
                while (envsz--)
 | 
					                do {
 | 
				
			||||||
                    *pv++ = *lenv++;
 | 
					                  pv[n] = Stack[bp+n];
 | 
				
			||||||
 | 
					                } while (n--);
 | 
				
			||||||
                // environment representation changed; install
 | 
					                // environment representation changed; install
 | 
				
			||||||
                // the new representation so everybody can see it
 | 
					                // the new representation so everybody can see it
 | 
				
			||||||
                captured = 1;
 | 
					                captured = 1;
 | 
				
			||||||
| 
						 | 
					@ -1510,10 +1511,10 @@ static value_t apply_cl(uint32_t nargs)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (op == OP_CLOSURE) {
 | 
					            if (op == OP_CLOSURE) {
 | 
				
			||||||
                pv = alloc_words(4);
 | 
					                pv = alloc_words(4);
 | 
				
			||||||
                x = Stack[SP-2];  // closure to copy
 | 
					                e = Stack[SP-2];  // closure to copy
 | 
				
			||||||
                assert(isfunction(x));
 | 
					                assert(isfunction(x));
 | 
				
			||||||
                pv[0] = ((value_t*)ptr(x))[0];
 | 
					                pv[0] = ((value_t*)ptr(e))[0];
 | 
				
			||||||
                pv[1] = ((value_t*)ptr(x))[1];
 | 
					                pv[1] = ((value_t*)ptr(e))[1];
 | 
				
			||||||
                pv[2] = Stack[SP-1];  // env
 | 
					                pv[2] = Stack[SP-1];  // env
 | 
				
			||||||
                POPN(1);
 | 
					                POPN(1);
 | 
				
			||||||
                Stack[SP-1] = tagptr(pv, TAG_FUNCTION);
 | 
					                Stack[SP-1] = tagptr(pv, TAG_FUNCTION);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@ FLAGS = -Wall -Wextra -Wno-strict-aliasing $(CFLAGS)
 | 
				
			||||||
LIBS =
 | 
					LIBS =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEBUGFLAGS = -g -DDEBUG $(FLAGS)
 | 
					DEBUGFLAGS = -g -DDEBUG $(FLAGS)
 | 
				
			||||||
SHIPFLAGS = -O2 -DNDEBUG $(FLAGS)
 | 
					SHIPFLAGS = -O3 -DNDEBUG $(FLAGS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
default: release
 | 
					default: release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue