aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/asm-function-2.C
blob: 87f46a6b7871ac49fb9a2fb87582f8785bdca2e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/* APPLE LOCAL file CW asm blocks */
/* Test whole asm functions.  */

/* { dg-do run { target powerpc*-*-darwin* } } */
/* { dg-options "-fasm-blocks -O2" } */

extern "C" void abort(void);

asm void normal_fn ()
{
  nop
  nop
}

asm void nofralloc_fn ()
{
  nofralloc
  nop
  blr
}

asm void fralloc_fn ()
{
  fralloc
  nop
  nop
}

asm int fralloc_fn_1 ()
{
  fralloc
  mr r4,r1
  frfree
  sub r3,r4,r1
  blr
}

asm int fralloc_fn_2 ()
{
  fralloc 1000
  nop
  frfree
  blr
}

asm int fralloc_fn_3 ()
{
  int loc1, loc2;
  fralloc 41
  nop
  mr r3, loc2
  frfree
  mr r3, loc1
  blr
}

asm int f6 ()
{
  opword 0x386004d2 /* li r3,1234 */
}

main()
{
  normal_fn ();
  nofralloc_fn ();
  fralloc_fn ();
  /*
  fralloc_fn_1 ();
  fralloc_fn_2 ();
  fralloc_fn_3 ();
  */
  if (f6 () != 1234)
    abort ();
  return 0;
}