asm-test-nofralloc.c

来自「Mac OS X 10.4.9 for x86 Source Code gcc」· C语言 代码 · 共 60 行

C
60
字号
/* APPLE LOCAL begin radar 4187164 *//* { dg-do run { target powerpc*-*-darwin* } } *//* This testcase isn't 64-bit safe.  *//* { dg-skip-if "" { powerpc*-*-darwin* } { "-m64" } { "" } } *//* { dg-options "-fasm-blocks" } */#include <stdio.h>extern void abort();asm int FibonacciAsm(register int n){    // prolog.  Save return addr and three scratch registers    nofralloc    mflr        r0    stw        r31, -4(sp)    stw        r30, -8(sp)    stw        r29, -12(sp)    stw        r0, 8(sp)    stwu        sp, -80(sp)    // body of function        // is n <= 1?  if so, n is our return value.  f(0) = 0, f(1) = 1, f(2) starts the actual math    cmpwi        cr7, n, 1            ble        cr7,LDone        /// ok, n > 2.  save n, compute f(n-1) and f(n-2), then add them together and we're done    mr        r31, n        subi        r3, r31, 1    bl        FibonacciAsm    mr        r30, r3        subi        r3, r31, 2    bl        FibonacciAsm    mr        r29, r3        add        r3, r29, r30LDone:    // epilog.  Restore scratch registers and return to caller    addi        sp, sp, 80    lwz        r0, 8(sp)    lwz        r29, -12(sp)    lwz        r30, -8(sp)    lwz        r31, -4(sp)    mtlr        r0    blr}int main(int argc, char* argv[]){    int x;        x = FibonacciAsm(12);    if (x != 144)      abort();    return 0;}/* APPLE LOCAL end radar 4187164 */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?