This is the mail archive of the cgen@sources.redhat.com mailing list for the CGEN project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Nested define-pmacro's


Michael Meissner writes:
 > When I run it with -v -v -v, I see by the trace that
 > only the second function is defined.
 > 
 > I see pmacros.scm has this little comment in it:
 > 
 > ; ??? Nested pmacros don't bind their arguments the way nested lambda's do.
 > ; Should they?
 > 
 > I'm hoping tomorrow to go into MIT and get a real book on scheme, but pointers
 > and online sources would be appreciated.

Dybvig's book is the place to start IMO.
The Little Schemer is too cutesie for me.
Both of these are refered to on the cgen home page.

Woohoo!  News flash, this just in.
I did a google search for Kent+Dybvig and found

http://www.scheme.com/tspl2d/

We gotta add this to the cgen page.

 > Here the source.  I've tried various different ways of coding the define-pmacro
 > call.

Got some example uses so I can play with it myself?

 > ;; name:	base function name
 > ;; comment:	base comment string
 > ;; attrs:	attribute list
 > ;; syntax1:	initial part of syntax string before the size field
 > ;; syntax2:	syntax string after adding the size field, not including $DREG=$S1REG,$S2REG or $DREG=$S1REG,IMM8
 > ;; format:	format list of the instruction fields, not include the 2 sources or destination
 > ;; imm-bit:	bit to set for the immediate form of the instruction
 > ;; u:		"U" if unsigned, "" if signed
 > ;; semantics:	macro that when expanded does the operation, args are result, arg1, arg2, and mode
 > ;; timing:	timing list
 > 
 > (define-pmacro (expand-osize name comment attrs syntax1 syntax2 format imm-bit bit-21 u semantics timing)
 >   (begin
 > 
 >     ;; 64-bit reg/reg format
 >     (dni (.sym name "-64bit-reg-reg")
 > 	 (.str comment ", 64 bit, reg,reg format")
 > 	 attrs
 > 	 (.str syntax1 syntax2 " " "$DREG" "=" "$S1REG" "," "$S2REG")
 > 	 (.splice +
 > 		  (.unsplice format)
 > 		  OSIZE_64
 > 		  DREG
 > 		  S2REG
 > 		  S1REG
 > 	 )
 > 
 > 	 (sequence ()
 > 		   (semantics DREG S1REG S2REG (.sym u DI))
 > 	 )
 > 
 > 	 timing
 >     )
 > 
 >     ;; 32-bit reg/reg format
 >     (dni (.sym name "-32bit-reg-reg")
 > 	 (.str comment ", 32 bit, reg,reg format")
 > 	 attrs
 > 	 (.str syntax1 ".32" syntax2 " " "$DREG" "=" "$S1REG" "," "$S2REG"")
 > 	 (.splice +
 > 		  (.unsplice format)
 > 		  OSIZE_32
 > 		  DREG
 > 		  S2REG
 > 		  S1REG
 > 	 )
 > 
 > 	 (sequence ()
 > 		   (semantics (subword (.sym u SI) DREG 0) (subword (.sym u SI) S1REG 0) (subword (.sym u SI) S2REG 0) (.sym u SI))
 > 		   (semantics (subword (.sym u SI) DREG 1) (subword (.sym u SI) S1REG 1) (subword (.sym u SI) S2REG 1) (.sym u SI))
 > 	 )
 > 
 > 	 timing
 >     )
 > 
 >     ;; other 6 formats deleted in the name of brevity
 >   )
 > )
 > 
 > (define-pmacro (macro-add ret arg1 arg2 mode) (begin (set ret (add mode arg1 arg2))))
 > (expand-osize add
 > 	      "add operation"				; comment
 > 	      ()					; attrs
 > 	      "add"					; syntax before size field
 > 	      ""					; syntax after size field, without args
 > 							; format
 > 	      (OPCODE_ADD
 > 	       OTHER_BITS)
 > 
 > 	      BIT_35_1					; bit 35 is the immediate bit
 > 	      ""					; signed operation
 > 	      macro-add					; macro to do add operation
 > 	      ()					; timing attributes
 > )


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]