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