Merge branch 'master' of git://factorcode.org/git/factor
						commit
						405a1591e3
					
				| 
						 | 
				
			
			@ -335,6 +335,24 @@ big-endian on
 | 
			
		|||
    7 ds-reg 0 STW
 | 
			
		||||
] f f f \ fixnum-mod define-sub-primitive
 | 
			
		||||
 | 
			
		||||
[
 | 
			
		||||
    3 ds-reg 0 LWZ
 | 
			
		||||
    ds-reg ds-reg 4 SUBI
 | 
			
		||||
    4 ds-reg 0 LWZ
 | 
			
		||||
    5 4 3 DIVW
 | 
			
		||||
    5 ds-reg 0 STW
 | 
			
		||||
] f f f \ fixnum/i-fast define-sub-primitive
 | 
			
		||||
 | 
			
		||||
[
 | 
			
		||||
    3 ds-reg 0 LWZ
 | 
			
		||||
    4 ds-reg -4 LWZ
 | 
			
		||||
    5 4 3 DIVW
 | 
			
		||||
    6 5 3 MULLW
 | 
			
		||||
    7 6 4 SUBF
 | 
			
		||||
    5 ds-reg -4 STW
 | 
			
		||||
    7 ds-reg 0 STW
 | 
			
		||||
] f f f \ fixnum-/mod-fast define-sub-primitive
 | 
			
		||||
 | 
			
		||||
[
 | 
			
		||||
    3 ds-reg 0 LWZ
 | 
			
		||||
    3 3 1 SRAWI
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -305,16 +305,33 @@ big-endian off
 | 
			
		|||
    ds-reg [] arg1 MOV                         ! push to stack
 | 
			
		||||
] f f f \ fixnum-shift-fast define-sub-primitive
 | 
			
		||||
 | 
			
		||||
[
 | 
			
		||||
: jit-fixnum-/mod
 | 
			
		||||
    temp-reg ds-reg [] MOV                     ! load second parameter
 | 
			
		||||
    ds-reg bootstrap-cell SUB                  ! adjust stack pointer
 | 
			
		||||
    div-arg ds-reg [] MOV                      ! load first parameter
 | 
			
		||||
    div-arg ds-reg bootstrap-cell neg [+] MOV  ! load first parameter
 | 
			
		||||
    mod-arg div-arg MOV                        ! make a copy
 | 
			
		||||
    mod-arg bootstrap-cell-bits 1- SAR         ! sign-extend
 | 
			
		||||
    temp-reg IDIV                              ! divide
 | 
			
		||||
    temp-reg IDIV ;                            ! divide
 | 
			
		||||
 | 
			
		||||
[
 | 
			
		||||
    jit-fixnum-/mod
 | 
			
		||||
    ds-reg bootstrap-cell SUB                  ! adjust stack pointer
 | 
			
		||||
    ds-reg [] mod-arg MOV                      ! push to stack
 | 
			
		||||
] f f f \ fixnum-mod define-sub-primitive
 | 
			
		||||
 | 
			
		||||
[
 | 
			
		||||
    jit-fixnum-/mod
 | 
			
		||||
    ds-reg bootstrap-cell SUB                  ! adjust stack pointer
 | 
			
		||||
    div-arg tag-bits get SHL                   ! tag it
 | 
			
		||||
    ds-reg [] div-arg MOV                      ! push to stack
 | 
			
		||||
] f f f \ fixnum/i-fast define-sub-primitive
 | 
			
		||||
 | 
			
		||||
[
 | 
			
		||||
    jit-fixnum-/mod
 | 
			
		||||
    div-arg tag-bits get SHL                   ! tag it
 | 
			
		||||
    ds-reg [] mod-arg MOV                      ! push to stack
 | 
			
		||||
    ds-reg bootstrap-cell neg [+] div-arg MOV
 | 
			
		||||
] f f f \ fixnum/mod-fast define-sub-primitive
 | 
			
		||||
 | 
			
		||||
[
 | 
			
		||||
    arg0 ds-reg [] MOV                         ! load local number
 | 
			
		||||
    fixnum>slot@                               ! turn local number into offset
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,8 @@ M: word integer-op-input-classes
 | 
			
		|||
        { fixnum- fixnum-fast }
 | 
			
		||||
        { fixnum* fixnum*fast }
 | 
			
		||||
        { fixnum-shift fixnum-shift-fast }
 | 
			
		||||
        { fixnum/i fixnum/i-fast }
 | 
			
		||||
        { fixnum/mod fixnum/mod-fast }
 | 
			
		||||
    } at ;
 | 
			
		||||
 | 
			
		||||
: modular-variant ( op -- fast-op )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -341,6 +341,8 @@ tuple
 | 
			
		|||
    { "fixnum-bitnot" "math.private" }
 | 
			
		||||
    { "fixnum-mod" "math.private" }
 | 
			
		||||
    { "fixnum-shift-fast" "math.private" }
 | 
			
		||||
    { "fixnum/i-fast" "math.private" }
 | 
			
		||||
    { "fixnum/mod-fast" "math.private" }
 | 
			
		||||
    { "fixnum<" "math.private" }
 | 
			
		||||
    { "fixnum<=" "math.private" }
 | 
			
		||||
    { "fixnum>" "math.private" }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue