#include<stdio.h>#include<stdlib.h>#include<stdint.h>#include"sys.h"#include"crisutils.h"/* need to avoid acr as source here. */externinlineintcris_addc_m(inta,constint*b){asmvolatile("addc [%1], %0\n":"+r"(a):"r"(b));returna;}/* 'b' is a crisv32 constrain to avoid postinc with $acr. */externinlineintcris_addc_pi_m(inta,int**b){asmvolatile("addc [%1+], %0\n":"+r"(a),"+b"(*b));returna;}#defineverify_addc_m(a,b,res,n,z,v,c)\{\intr;\r=cris_addc_m((a),(b));\cris_tst_cc((n),(z),(v),(c));\if(r!=(res))\err();\}#defineverify_addc_pi_m(a,b,res,n,z,v,c)\{\intr;\r=cris_addc_pi_m((a),(b));\cris_tst_cc((n),(z),(v),(c));\if(r!=(res))\err();\}intx[]={0,0,2,-1,0xffff,-1,0x5432f789};intmain(void){int*p=(void*)&x[0];#if1cris_tst_cc_init();asmvolatile("clearf cz");verify_addc_m(0,p,0,0,0,0,0);cris_tst_cc_init();asmvolatile("setf z");verify_addc_m(0,p,0,0,1,0,0);cris_tst_cc_init();asmvolatile("setf c");verify_addc_m(0,p,1,0,0,0,0);cris_tst_cc_init();asmvolatile("clearf c");verify_addc_pi_m(0,&p,0,0,1,0,0);p=&x[1];cris_tst_cc_init();asmvolatile("setf c");verify_addc_pi_m(0,&p,1,0,0,0,0);if(p!=&x[2])err();cris_tst_cc_init();asmvolatile("clearf c");verify_addc_pi_m(-1,&p,1,0,0,0,1);if(p!=&x[3])err();#endifp=&x[3];/* TODO: investigate why this one fails. */cris_tst_cc_init();asmvolatile("setf c");verify_addc_m(2,p,2,0,0,0,1);p+=4;pass();return0;}