Simple inline Sparc assembly example : set input and get output - right syntax
hpti
henri.petit09@gmail.com
Fri May 19 00:55:00 GMT 2017
I try to do a simple example to insert, into a C code, a piece of Sparc
assembly 32 bits; this little code performs an incrementation on the
variable "sum".
The code is :
* #include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
int n;
int sum;
int main ()
{
n = 100;
sum = 0;
struct timeval tv1, tv2;
long long diff;
gettimeofday (&tv1, NULL);
asm volatile ("set sum, %g1\n\t" \
"set n, %g3\n" \
"loop:\n\t" \
"add %g1, 1, %g2\n\t" \
"sub %g3, 1, %g4\n\t" \
"bne loop\n\t" \
"nop\n\t" \
: "=r" (sum)
: "r" (n)
);
gettimeofday (&tv2, NULL);
diff = (tv2.tv_sec - tv1.tv_sec) * 1000000L + (tv2.tv_usec -
tv1.tv_usec);
printf ("Elapsed time = %d usec\n", diff);
printf ("Sum = %d\n", sum);
return 0;
}*
Unfortunately, compilation with gcc4.1.2 produces the following errors :
*loop_dev_for-assembly_code.c: In function #main#:
loop_dev_for-assembly_code.c:18: error: invalid 'asm': invalid operand
output code
loop_dev_for-assembly_code.c:18: error: invalid 'asm': operand number
out of range
loop_dev_for-assembly_code.c:18: error: invalid 'asm': invalid operand
output code
loop_dev_for-assembly_code.c:18: error: invalid 'asm': operand number
out of range
loop_dev_for-assembly_code.c:18: error: invalid 'asm': operand number
out of range
loop_dev_for-assembly_code.c:18: error: invalid 'asm': operand number
out of range
*
It seems the line 18 corresponds to "`asm volatile ("set sum, %g1\n\t" \
...`".
But I don't know how to circumvent these errors. It may come from the
variable `sum` which is set to `%g1` register.
About the links between variable belonging to C code and variable localted
in Assembly code part. I have also seen, for inputs and outputs parameters,
the syntax `"=g"` (output paramter ??), `"g"` (input parameter) : I think
that it corresponds to different registers between the 2 syntax.
if someone could help me to find the main mistakes that I have made in this
inline assembly code and some clues to use right syntax for the link between
input and output variables.
Thanks for your help, regards.
--
View this message in context: http://gcc.1065356.n8.nabble.com/Simple-inline-Sparc-assembly-example-set-input-and-get-output-right-syntax-tp1376842.html
Sent from the gcc - Help mailing list archive at Nabble.com.
More information about the Gcc-help
mailing list