| 
									
										
										
										
											2008-10-21 04:20:48 -04:00
										 |  |  | ! Copyright (C) 2008 Slava Pestov. | 
					
						
							| 
									
										
										
										
											2008-09-10 23:11:03 -04:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2008-10-21 04:20:48 -04:00
										 |  |  | USING: math sequences kernel cpu.architecture | 
					
						
							| 
									
										
										
										
											2008-10-20 02:56:28 -04:00
										 |  |  | compiler.cfg.instructions compiler.cfg.registers | 
					
						
							| 
									
										
										
										
											2008-10-20 21:40:15 -04:00
										 |  |  | compiler.cfg.hats ;
 | 
					
						
							|  |  |  | IN: compiler.cfg.stacks | 
					
						
							| 
									
										
										
										
											2008-09-10 23:11:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-21 04:20:48 -04:00
										 |  |  | : ds-drop ( -- )
 | 
					
						
							|  |  |  |     -1 ##inc-d ;
 | 
					
						
							| 
									
										
										
										
											2008-09-17 19:52:11 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-21 04:20:48 -04:00
										 |  |  | : ds-pop ( -- vreg )
 | 
					
						
							|  |  |  |     D 0 ^^peek -1 ##inc-d ;
 | 
					
						
							| 
									
										
										
										
											2008-09-10 23:11:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-21 04:20:48 -04:00
										 |  |  | : ds-push ( vreg -- )
 | 
					
						
							|  |  |  |     1 ##inc-d D 0 ##replace ;
 | 
					
						
							| 
									
										
										
										
											2008-09-10 23:11:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-21 04:20:48 -04:00
										 |  |  | : ds-load ( n -- vregs )
 | 
					
						
							| 
									
										
										
										
											2008-11-11 19:46:31 -05:00
										 |  |  |     dup 0 =
 | 
					
						
							|  |  |  |     [ drop f ] | 
					
						
							|  |  |  |     [ [ <reversed> [ <ds-loc> ^^peek ] map ] [ neg ##inc-d ] bi ] if ;
 | 
					
						
							| 
									
										
										
										
											2008-09-10 23:11:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-21 04:20:48 -04:00
										 |  |  | : ds-store ( vregs -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-11 19:46:31 -05:00
										 |  |  |     [ | 
					
						
							|  |  |  |         <reversed>
 | 
					
						
							|  |  |  |         [ length ##inc-d ] | 
					
						
							|  |  |  |         [ [ <ds-loc> ##replace ] each-index ] bi
 | 
					
						
							|  |  |  |     ] unless-empty ;
 | 
					
						
							| 
									
										
										
										
											2008-09-10 23:11:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-21 04:20:48 -04:00
										 |  |  | : rs-load ( n -- vregs )
 | 
					
						
							| 
									
										
										
										
											2008-11-11 19:46:31 -05:00
										 |  |  |     dup 0 =
 | 
					
						
							|  |  |  |     [ drop f ] | 
					
						
							|  |  |  |     [ [ <reversed> [ <rs-loc> ^^peek ] map ] [ neg ##inc-r ] bi ] if ;
 | 
					
						
							| 
									
										
										
										
											2008-09-10 23:11:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-21 04:20:48 -04:00
										 |  |  | : rs-store ( vregs -- )
 | 
					
						
							| 
									
										
										
										
											2008-11-11 19:46:31 -05:00
										 |  |  |     [ | 
					
						
							|  |  |  |         <reversed>
 | 
					
						
							|  |  |  |         [ length ##inc-r ] | 
					
						
							|  |  |  |         [ [ <rs-loc> ##replace ] each-index ] bi
 | 
					
						
							|  |  |  |     ] unless-empty ;
 | 
					
						
							| 
									
										
										
										
											2008-09-10 23:11:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-21 04:20:48 -04:00
										 |  |  | : 2inputs ( -- vreg1 vreg2 )
 | 
					
						
							|  |  |  |     D 1 ^^peek D 0 ^^peek -2 ##inc-d ;
 | 
					
						
							| 
									
										
										
										
											2008-09-10 23:11:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-21 04:20:48 -04:00
										 |  |  | : 3inputs ( -- vreg1 vreg2 vreg3 )
 | 
					
						
							|  |  |  |     D 2 ^^peek D 1 ^^peek D 0 ^^peek -3 ##inc-d ;
 |