2010-05-18 17:10:32 -04:00
|
|
|
! Copyright (C) 2008, 2010 Slava Pestov.
|
2008-06-25 04:25:08 -04:00
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2009-07-29 22:44:08 -04:00
|
|
|
USING: kernel words words.symbol sequences lexer parser fry
|
2010-05-18 17:10:32 -04:00
|
|
|
namespaces combinators assocs math ;
|
2008-06-25 04:25:08 -04:00
|
|
|
IN: cpu.x86.assembler.syntax
|
|
|
|
|
2009-07-29 22:44:08 -04:00
|
|
|
SYMBOL: registers
|
2008-06-25 04:25:08 -04:00
|
|
|
|
2009-07-29 22:44:08 -04:00
|
|
|
registers [ H{ } clone ] initialize
|
2008-06-25 04:25:08 -04:00
|
|
|
|
2009-07-29 22:44:08 -04:00
|
|
|
: define-register ( name num size -- word )
|
2010-05-18 17:10:32 -04:00
|
|
|
[ create-in ] 2dip {
|
2009-07-29 22:44:08 -04:00
|
|
|
[ 2drop ]
|
|
|
|
[ 2drop define-symbol ]
|
|
|
|
[ drop "register" set-word-prop ]
|
|
|
|
[ nip "register-size" set-word-prop ]
|
|
|
|
} 3cleave ;
|
|
|
|
|
2010-05-18 17:10:32 -04:00
|
|
|
: (define-registers) ( names start size -- seq )
|
|
|
|
'[ _ + _ define-register ] map-index ;
|
2009-07-29 22:44:08 -04:00
|
|
|
|
2010-05-18 17:10:32 -04:00
|
|
|
: define-registers ( names size -- )
|
2010-05-18 17:59:34 -04:00
|
|
|
[ [ 0 ] dip (define-registers) ] keep registers get set-at ;
|
2010-05-18 17:10:32 -04:00
|
|
|
|
|
|
|
SYNTAX: REGISTERS:
|
2011-10-01 19:42:37 -04:00
|
|
|
scan-number [ ";" parse-tokens ] dip define-registers ;
|
2010-05-18 17:10:32 -04:00
|
|
|
|
|
|
|
SYNTAX: HI-REGISTERS:
|
2011-10-01 19:42:37 -04:00
|
|
|
scan-number [ ";" parse-tokens 4 ] dip (define-registers) drop ;
|