ASM and a LDIVU example

Archived XCore tutorials.
User avatar
lilltroll
XCore Expert
Posts: 955
Joined: Fri Dec 11, 2009 3:53 am
Location: Sweden, Eskilstuna

ASM and a LDIVU example

Postby lilltroll » Fri May 07, 2010 12:23 pm

If you read the ASM manual ver. 9.9 you will probably get confused - until it's updated.

Reading the The XMOS XS1 Architecture describes the LDIVU operation as

Code: Select all

LDIVU d, e, x, y, v


The XS1 Assembly Language Manual seems to show two incorrect ways of writing it

Code: Select all

LDIVU  d,x,y,e,v    ldivu  d, e, v, x, y


For the moments it's seems to be several errors explaining the operands in the ASM manual.
The correct notation is found in the XS1 architecture.

Code: Select all

#include <stdio.h>

int main(){
   unsigned int Xh=0,Xl=31;
   unsigned int y=5;
   unsigned int Q;
   unsigned int R;
   
   asm("LDIVU %0,%1,%2,%3,%4" : "=r"(Q) , "=r"(R) : "r"(Xh) , "r"(Xl) ,"r"(y));
   printf("Q=%u, R=%u",Q,R);
}


Gives the following result on the console:
Q=6, R=1

31/5 = 6 + 1/5
Q is the Quotent, R is the reminder and the operation is (uint_64) X/(uint_32) y where X is expressed as 2 32-bits number Xhigh and Xlow.

Thus its:
LDIVU Quotent,Reminder,Xhigh,Xlow,Y
Probably not the most confused programmer anymore on the XCORE forum.
User avatar
larry
Respected Member
Posts: 275
Joined: Fri Mar 12, 2010 6:03 pm

Postby larry » Fri May 07, 2010 3:43 pm


Who is online

Users browsing this forum: No registered users and 0 guests