📄 check_addcm.c.svn-base
字号:
#include <stdio.h>#include <stdlib.h>#include <stdint.h>#include "sys.h"#include "crisutils.h"/* need to avoid acr as source here. */extern inline int cris_addc_m(int a, const int *b) { asm volatile ("addc [%1], %0\n" : "+r" (a) : "r" (b)); return a;}/* 'b' is a crisv32 constrain to avoid postinc with $acr. */extern inline int cris_addc_pi_m(int a, int **b) { asm volatile ("addc [%1+], %0\n" : "+r" (a), "+b" (*b)); return a;}#define verify_addc_m(a, b, res, n, z, v, c) \{ \ int r; \ r = cris_addc_m((a), (b)); \ cris_tst_cc((n), (z), (v), (c)); \ if (r != (res)) \ err(); \}#define verify_addc_pi_m(a, b, res, n, z, v, c) \{ \ int r; \ r = cris_addc_pi_m((a), (b)); \ cris_tst_cc((n), (z), (v), (c)); \ if (r != (res)) \ err(); \}int x[] = { 0, 0, 2, -1, 0xffff, -1, 0x5432f789};int main(void){ int *p = (void *)&x[0];#if 1 cris_tst_cc_init(); asm volatile ("clearf cz"); verify_addc_m(0, p, 0, 0, 0, 0, 0); cris_tst_cc_init(); asm volatile ("setf z"); verify_addc_m(0, p, 0, 0, 1, 0, 0); cris_tst_cc_init(); asm volatile ("setf c"); verify_addc_m(0, p, 1, 0, 0, 0, 0); cris_tst_cc_init(); asm volatile ("clearf c"); verify_addc_pi_m(0, &p, 0, 0, 1, 0, 0); p = &x[1]; cris_tst_cc_init(); asm volatile ("setf c"); verify_addc_pi_m(0, &p, 1, 0, 0, 0, 0); if (p != &x[2]) err(); cris_tst_cc_init(); asm volatile ("clearf c"); verify_addc_pi_m(-1, &p, 1, 0, 0, 0, 1); if (p != &x[3]) err();#endif p = &x[3]; /* TODO: investigate why this one fails. */ cris_tst_cc_init(); asm volatile ("setf c"); verify_addc_m(2, p, 2, 0, 0, 0, 1); p += 4; pass(); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -