Changeset 13406


Ignore:
Timestamp:
Jan 25, 2010, 9:25:01 PM (10 years ago)
Author:
rme
Message:

Increase CALL-ARGUMENTS-LIMIT to 65536 on non-PPC targets.

On x86-64, this lets a single APPLY push 512KB, which is a
significant portion of the default stack size of 2MB.

At the moment, the only thing that checks CALL-ARGUMENTS-LIMIT
is .SPspreadargz, which uses it to guard against the case of
a possibly-circular last argument to APPLY.

Location:
trunk/source
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/level-1/l1-init.lisp

    r13067 r13406  
    140140  in a given lambda list. This is actually the limit on required and &OPTIONAL
    141141  parameters. With &KEY and &AUX you can get more.")
    142 (defconstant call-arguments-limit (floor #x8000 target::node-size)
     142(defconstant call-arguments-limit #+ppc-target (floor #x8000 target::node-size)
     143                                  #-ppc-target #x10000
    143144  "The exclusive upper bound on the number of arguments which may be passed
    144145  to a function, including &REST args."
  • trunk/source/lisp-kernel/x86-constants32.s

    r13337 r13406  
    613613target_most_positive_fixnum = 536870911
    614614target_most_negative_fixnum = -536870912
    615 call_arguments_limit = 8192
     615call_arguments_limit = 0x10000
    616616
    617617lisp_globals_limit = (0x13000+(LOWMEM_BIAS))
  • trunk/source/lisp-kernel/x86-constants64.s

    r13337 r13406  
    10371037target_most_positive_fixnum = 1152921504606846975
    10381038target_most_negative_fixnum = -1152921504606846976
    1039 
     1039call_arguments_limit = 0x10000
    10401040
    10411041lisp_globals_limit = 0x13000
    1042        
     1042
    10431043INTERRUPT_LEVEL_BINDING_INDEX = fixnumone
    10441044
    10451045c_stack_16_byte_aligned = 1
    1046                
    1047                        
    1048                
  • trunk/source/lisp-kernel/x86-spentry32.s

    r13337 r13406  
    25242524        __(add $node_size,%nargs)
    25252525        __(cmpl $call_arguments_limit<<fixnumshift,%nargs)
    2526         __(jge 8f)
     2526        __(jae 8f)
    25272527        __(push %arg_y)
    25282528        __(cmpl $nil_value,%arg_z)
  • trunk/source/lisp-kernel/x86-spentry64.s

    r13337 r13406  
    24862486        __(cmpb $fulltag_cons,%imm1_b)
    24872487        __(jne 9f)
    2488         __(addw $node_size,%imm0_w)
    24892488        __(_car(%arg_z,%arg_x))
    24902489        __(_cdr(%arg_z,%arg_z))
    2491         __(js 8f)
     2490        __(addl $node_size,%imm0_l)
     2491        __(cmpl $call_arguments_limit<<fixnumshift, %imm0_l)
     2492        __(jae 8f)
    24922493        __(compare_reg_to_nil(%arg_z))
    24932494        __(push %arg_x)
    24942495        __(jne 1b)
    2495 2:      __(addw %imm0_w,%nargs_w)
     24962:      __(addl %imm0_l,%nargs)
    24962497        __(jne 4f)
    249724983:      __(addq $2*node_size,%rsp)
Note: See TracChangeset for help on using the changeset viewer.