symbian-qemu-0.9.1-12/qemu-symbian-svp/tests/cris/check_addoq.c
author mikek
Mon, 05 Jul 2010 15:30:26 +0100
branchGCC_SURGE
changeset 87 42ae69d3c4a8
parent 1 2fb8b9db1c86
permissions -rw-r--r--
1) Fix for Bug 3157 - Compilation error in gui_common.h 2) Fix for Bug 3158 - Compilation error in qemu-char.c 3) Fix for Bug 3160 - [GCCE] Illegal instruction in baseport/syborg/bootstrap/syborg.s 4) Fix for Bug 3162 - [GCCE] VFP math support needs excluded to build syborg ROM 5) Fix for Bug 3163 - [GCCE] Syborg baseport build breaks when EPOCROOT is not filesystem root 6) Fix for Bug 3164 - [GCCE] baseport/syborg/bld.inf needs to discriminate GCCE from ARMCC

#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(1, 1, 1, 1);
	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;
}