public inbox for cgen@sourceware.org
 help / color / mirror / Atom feed
* Nested define-pmacro's
@ 2003-06-20  2:35 Michael Meissner
  2003-06-20  4:47 ` Doug Evans
  0 siblings, 1 reply; 4+ messages in thread
From: Michael Meissner @ 2003-06-20  2:35 UTC (permalink / raw)
  To: cgen

My machine has lots of instructions, but most of them are fairly regular, so
I've been trying to use nested define-pmacro's to avoid excessive amounts of
typing.  For example, there are 8 different add varients (4 sizes and 2 formats
for each size).  Here is a cut-down example that won't run, but shows you the
flavor of what I'm doing.  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.

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

;; 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
)


-- 
Michael Meissner
email: gnu@the-meissners.org
http://www.the-meissners.org

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Nested define-pmacro's
  2003-06-20  2:35 Nested define-pmacro's Michael Meissner
@ 2003-06-20  4:47 ` Doug Evans
  2003-06-20 16:14   ` Michael Meissner
  0 siblings, 1 reply; 4+ messages in thread
From: Doug Evans @ 2003-06-20  4:47 UTC (permalink / raw)
  To: Michael Meissner; +Cc: cgen

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
 > )

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Nested define-pmacro's
  2003-06-20  4:47 ` Doug Evans
@ 2003-06-20 16:14   ` Michael Meissner
  2003-07-02  0:44     ` Ben Elliston
  0 siblings, 1 reply; 4+ messages in thread
From: Michael Meissner @ 2003-06-20 16:14 UTC (permalink / raw)
  To: cgen

On Thu, Jun 19, 2003 at 09:46:48PM -0700, Doug Evans wrote:
> Got some example uses so I can play with it myself?

I sent a reduced example to Doug via private mail.

-- 
Michael Meissner
email: gnu@the-meissners.org
http://www.the-meissners.org

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Nested define-pmacro's
  2003-06-20 16:14   ` Michael Meissner
@ 2003-07-02  0:44     ` Ben Elliston
  0 siblings, 0 replies; 4+ messages in thread
From: Ben Elliston @ 2003-07-02  0:44 UTC (permalink / raw)
  To: cgen

Michael Meissner <cgen-mail@the-meissners.org> writes:

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

> I sent a reduced example to Doug via private mail.

I expected that it should Just Work:

2002-03-19  Hans-Peter Nilsson  <hp@axis.com>

	* pmacros.scm (-pmacro-expand,scan): If result is a symbol,
	call scan-symbol on it, to enable recursive macro-expansion.

Ben

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2003-07-02  0:44 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-06-20  2:35 Nested define-pmacro's Michael Meissner
2003-06-20  4:47 ` Doug Evans
2003-06-20 16:14   ` Michael Meissner
2003-07-02  0:44     ` Ben Elliston

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).