From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: Date: Thu, 10 Mar 2005 17:05:25 -0500 From: Russ Cox To: Fans of the OS Plan 9 from Bell Labs <9fans@cse.psu.edu> Subject: Re: [9fans] ARM question In-Reply-To: Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit References: Topicbox-Message-UUID: 22e1701c-ead0-11e9-9d60-3106f5b1d025 perhaps the argument to MOVW.P is the final (post-increment) value instead of the value used during the write. On Thu, 10 Mar 2005 14:55:37 -0700 (MST), Ronald G. Minnich wrote: > > here's the code in c: > #include > #include > y(){ > unsigned long *x; > x = (unsigned long *) 0x4000; > *x = (unsigned long) 0x40e; > } > main(){ > unsigned long *x; > static unsigned long y[64]; > int i; > > x = (unsigned long *) 0x4000; > *x = (unsigned long) 0x40e; > x++; > *x = (unsigned long)0x100000 + 0x40e; > x++; > *x = (unsigned long)0x200000 + 0x40e; > x++; > *x = (unsigned long)0x300000 + 0x40e; > x++; > *x = (unsigned long)0x400000 + 0x40e; > x++; > *x = (unsigned long)0x500000 + 0x40e; > x++; > *x = (unsigned long)0x600000 + 0x40e; > x++; > *x = (unsigned long)0x700000 + 0x40e; > > } > > And the .s > TEXT y+0(SB),0,$4 > MOVW $1038,R4 > MOVW $16384,R1 > MOVW R4,0(R1) > RET , > TEXT main+0(SB),0,$8 > MOVW $1049614,R10 > MOVW $2098190,R9 > MOVW $3146766,R8 > MOVW $4195342,R7 > MOVW $5243918,R6 > MOVW $6292494,R5 > MOVW $7341070,R4 > MOVW $16384,R3 > MOVW $1038,R2 > MOVW.P R2,4(R3) > MOVW.P R10,4(R3) > MOVW.P R9,4(R3) > MOVW.P R8,4(R3) > MOVW.P R7,4(R3) > MOVW.P R6,4(R3) > MOVW R5,0(R3) > MOVW R4,4(R3) > RET , > GLOBL y$2<>+0(SB),R0,$256 > END , > > The code for y() I can understand. > > but this: > > MOVW $16384,R3 > MOVW $1038,R2 > MOVW.P R2,4(R3) > > I don't get. How can R2 get stored to 16384, given the 4(R3)? > > Are we pretty much agreed that the MOVW.P is a post-increment mode? > > ron >