140 lines · 3.4 KB · Assembly
RawDownload
#0# SetByte	addw	32(fp),36(fp),44(fp)	movb    40(fp),0(44(fp))	ret#3# SetInt	addw	32(fp),36(fp),44(fp)	movw	40(fp),0(44(fp))	ret#6# SetBig	addw	32(fp),36(fp),48(fp)	movl	40(fp),0(48(fp))	ret#9	# SetReal	addw	32(fp),36(fp),48(fp)	movf	40(fp),0(48(fp))	ret#12# SetObj	addw	32(fp),36(fp),44(fp)	movp	40(fp),0(44(fp))	ret#15# GetByte	addw	32(fp),36(fp),40(fp)	movb	0(40(fp)),0(16(fp))	ret#18# GetInt	addw	32(fp),36(fp),40(fp)	movw	0(40(fp)),0(16(fp))	ret#21# GetBig	addw	32(fp),36(fp),40(fp)	movl	0(40(fp)),0(16(fp))	ret#24# GetReal	addw	32(fp),36(fp),40(fp)	movf	0(40(fp)),0(16(fp))	ret#27# GetObj	addw	32(fp),36(fp),40(fp)	movp	0(40(fp)),0(16(fp))	ret#30#CallMethod: frame size==80  map==0x00b840# params#   module ptr: 32(fp)  ptr#   method idx: 36(fp)#   this ptr:   40(fp)  ptr#   args:       44(fp)  ptr#   ret-val:    48(fp)  ptr# local vars used: #   frame:      52(fp)  not-marked#   frame-slot: 56(fp)#   loop index: 60(fp)#   tmp:        64(fp)  -- used for array idexing & alignment ck#   pick-tmp:   68(fp)  ptr#   array len:  72(fp)#	mframe	32(fp),36(fp),52(fp)	addw	52(fp),$32,56(fp)		#compute slot address for arg	beqw	0(mp),40(fp),$35        #if static then 'this' is nil	movp	40(fp),0(56(fp))		#move 'this' into frame	addw	$4,56(fp)               #next slot#35	# move args into frame	# for(idx:=0; idx <len args; idx++ )	movw	$0,60(fp)				#initialize loop idx	lena	44(fp),72(fp)			#length of array#37	blew	72(fp),60(fp),$60		#loop condition	indw	44(fp),64(fp),60(fp)	#index the array	movp	0(64(fp)),68(fp)		#grab the array element; its a ref pick-adt	case	0(68(fp)),4(mp)			#switch off of the 'pick' id#41	movp	4(68(fp)),0(56(fp))		#  object param	jmp	$57#43	movw	4(68(fp)),0(56(fp))     #  word param (byte,short,char,boolean,int)	jmp	$57#45	andw	56(fp),$7,64(fp)        #  check for 8-byte alignment	beqw	64(fp),$0,$48           #  branch if already aligned	addw	$4,56(fp)               #  next slot is aligned	movl	8(68(fp)),0(56(fp))     #  big param (long)	addw	$8,56(fp)               #  next param slot	jmp	$58#51	andw	56(fp),$7,64(fp)        #  check for 8-byte alignment	beqw	64(fp),$0,$54           #  branch if already aligned	addw	$4,56(fp)               #  next slot is aligned	movf	8(68(fp)),0(56(fp))     #  real param (float,double)	addw	$8,56(fp)               #  next param slot	jmp	$58#57	addw	$4,56(fp)               #  next slot#58	addw	$1,60(fp)				#inc loop index	jmp	$37                         #end-for#60	# setup return value if one exists	beqw	0(mp),48(fp),$65        #if nil then no functional return	case	0(48(fp)),60(mp)        #switch off pick field of ret-value#62	lea		4(48(fp)),16(52(fp))    #4-byte aligned return addr	jmp	$65	lea		8(48(fp)),16(52(fp))    #8-byte aligned return addr#65	mcall	52(fp),36(fp),32(fp)		ret## change the following with care#	desc	$0,92,"80"	desc	$1,48,"00a0"	desc	$2,40,"0080"	desc	$3,48,"0080"	desc	$4,80,"00b840"	var	@mp,92	word	@mp+4,4,0,1,41,1,6,43,6,7,45,7,9,51,66	word	@mp+60,2,0,6,62,6,9,64,66	module	Low	link	3,0, 0x349a7796,"SetByte"	link	3,3, 0x2de68727,"SetInt"	link	3,6, 0xd7e9f417,"SetBig"	link	3,9 ,0xa51f3c84,"SetReal"	link	1,12,0x2ada273,"SetObj"	link	2,15,0x65a049aa,"GetByte"	link	2,18,0x7060ebba,"GetInt"	link	2,21,0x9f04ed0,"GetBig"	link	2,24,0x553990fb,"GetReal"	link	2,27,0x30af57fd,"GetObj"	link	4,30,0x2943aeae,"CallMethod"