mirror of https://gitee.com/openkylin/qemu.git
45 lines
965 B
C
45 lines
965 B
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdint.h>
|
|
#include "sys.h"
|
|
#include "crisutils.h"
|
|
|
|
/* this would be better to do in asm, it's an orgy in GCC inline asm now. */
|
|
|
|
/* ACR will be clobbered. */
|
|
#define cris_addoq(o, v) \
|
|
asm volatile ("addoq\t%1, %0, $acr\n" : : "r" (v), "i" (o) : "acr");
|
|
|
|
|
|
int main(void)
|
|
{
|
|
int x[3] = {0x55aa77ff, 0xccff2244, 0x88ccee19};
|
|
int *p, *t = x + 1;
|
|
|
|
cris_tst_cc_init();
|
|
asm volatile ("setf\tzvnc\n");
|
|
cris_addoq(0, t);
|
|
cris_tst_cc(1, 1, 1, 1);
|
|
asm volatile ("move.d\t$acr, %0\n" : "=r" (p));
|
|
if (*p != 0xccff2244)
|
|
err();
|
|
|
|
cris_tst_cc_init();
|
|
asm volatile ("setf\tzvnc\n");
|
|
cris_addoq(4, t);
|
|
cris_tst_cc(0, 0, 0, 0);
|
|
asm volatile ("move.d\t$acr, %0\n" : "=r" (p));
|
|
if (*p != 0x88ccee19)
|
|
err();
|
|
|
|
cris_tst_cc_init();
|
|
asm volatile ("clearf\tzvnc\n");
|
|
cris_addoq(-8, t + 1);
|
|
cris_tst_cc(0, 0, 0, 0);
|
|
asm volatile ("move.d\t$acr, %0\n" : "=r" (p));
|
|
if (*p != 0x55aa77ff)
|
|
err();
|
|
pass();
|
|
return 0;
|
|
}
|