typedef long unsigned int size_t; extern int printf(__const char *__restrict __format, ...); size_t errors = 0; static void check(int thing, int number) { if (!thing) ++errors; } int _strcmp(const char *cs, const char *ct) { int __res1, __res2; __asm__("1:\t%2 = B[%0++] (Z);\n\t" "%3 = B[%1++] (Z);\n\t" "CC = %2 == %3;\n\t" "if ! cc jump 2f;\n\t" "CC = %2;\n\t" "if cc jump 1b (bp);\n\t" "jump.s 3f;\n" "2:\t%2 = %2 - %3;\n" "3:\n": "+&a"(cs), "+&a"(ct), "=&d"(__res1), "=&d"(__res2): :"CC"); return __res1; } void test_strcmp(void) { char buf1[0x40], buf2[0x40]; int i, j; check(_strcmp(buf1 + i, buf2 + j) > 0, 2); } int main(int argc, char *argv[]) { test_strcmp(); if (errors == 0) { } else { printf("TEST FAIL.\n"); } }