mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 21:29:20 +00:00
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@786 91177308-0d34-0410-b5e6-96231b3b80d8
235 lines
4.2 KiB
C
235 lines
4.2 KiB
C
void *malloc(unsigned);
|
|
void foundIt(void);
|
|
|
|
typedef struct list {
|
|
struct list *Next;
|
|
int Data;
|
|
} list;
|
|
|
|
extern list ListNode1;
|
|
list ListNode3 = { 0, 4 };
|
|
list ListNode2 = { &ListNode3, 3 };
|
|
list ListNode0 = { &ListNode1, 1 };
|
|
list ListNode1 = { &ListNode2, 2 };
|
|
|
|
int *ListDataPtr = &ListNode3.Data;
|
|
|
|
list ListArray[10];
|
|
|
|
/*
|
|
TODO: When we have getelementptr on globals
|
|
list *ListArrElement = ListArray+4;
|
|
list *ListArrElement2 = &ListArray[5];
|
|
*/
|
|
|
|
// Iterative insert fn
|
|
void InsertIntoListTail(list **L, int Data) {
|
|
while (*L)
|
|
L = &(*L)->Next;
|
|
*L = (list*)malloc(sizeof(list));
|
|
(*L)->Data = Data;
|
|
(*L)->Next = 0;
|
|
}
|
|
|
|
// Recursive list search fn
|
|
list *FindData(list *L, int Data) {
|
|
if (L == 0) return 0;
|
|
if (L->Data == Data) return L;
|
|
return FindData(L->Next, Data);
|
|
}
|
|
|
|
// Driver fn...
|
|
void DoListStuff() {
|
|
list *MyList = 0;
|
|
InsertIntoListTail(&MyList, 100);
|
|
InsertIntoListTail(&MyList, 12);
|
|
InsertIntoListTail(&MyList, 42);
|
|
InsertIntoListTail(&MyList, 1123);
|
|
InsertIntoListTail(&MyList, 1213);
|
|
|
|
if (FindData(MyList, 75)) foundIt();
|
|
if (FindData(MyList, 42)) foundIt();
|
|
if (FindData(MyList, 700)) foundIt();
|
|
}
|
|
|
|
|
|
//#include <stdio.h>
|
|
int puts(const char *s);
|
|
|
|
struct FunStructTest {
|
|
int Test1;
|
|
char *Pointer;
|
|
int Array[12];
|
|
};
|
|
|
|
struct SubStruct {
|
|
short X, Y;
|
|
};
|
|
|
|
struct Quad {
|
|
int w;
|
|
struct SubStruct SS;
|
|
struct SubStruct *SSP;
|
|
char c;
|
|
int y;
|
|
};
|
|
|
|
struct Quad GlobalQuad = { 4, {1, 2}, 0, 3, 156 };
|
|
|
|
typedef int (*FuncPtr)(int);
|
|
|
|
#if 0
|
|
unsigned PtrFunc(int (*Func)(int), int X) {
|
|
return Func(X);
|
|
}
|
|
|
|
char PtrFunc2(FuncPtr FuncTab[30], int Num) {
|
|
return FuncTab[Num]('b');
|
|
}
|
|
|
|
extern char SmallArgs2(char w, char x, long long Zrrk, char y, char z);
|
|
extern int SomeFunc(void);
|
|
char SmallArgs(char w, char x, char y, char z) {
|
|
SomeFunc();
|
|
return SmallArgs2(w-1, x+1, y, z, w);
|
|
}
|
|
#endif
|
|
|
|
#if 1
|
|
int F0(struct Quad Q, int i) { /* Pass Q by value */
|
|
struct Quad R;
|
|
if (i) R.SS = Q.SS;
|
|
//Q.SSP = &R.SS;
|
|
Q.w = Q.y = Q.c = 1;
|
|
return Q.SS.Y + i + R.y - Q.c;
|
|
}
|
|
|
|
int F1(struct Quad *Q, int i) { /* Pass Q by address */
|
|
struct Quad R;
|
|
#if 0
|
|
if (i) R.SS = Q->SS;
|
|
#else
|
|
if (i) R = *Q;
|
|
#endif
|
|
Q->w = Q->y = Q->c = 1;
|
|
return Q->SS.Y+i+R.y-Q->c;
|
|
}
|
|
#endif
|
|
|
|
|
|
int BadFunc(float Val) {
|
|
int Result;
|
|
#if BROKEN_PHIS
|
|
if (Val > 12.345) Result = 4;
|
|
#endif
|
|
return Result; /* Test use of undefined value */
|
|
}
|
|
|
|
#if USE_UNDEFINED
|
|
int RealFunc(void) {
|
|
return SomeUndefinedFunction(1, 4, 5);
|
|
}
|
|
#endif
|
|
|
|
extern int EF1(int *, char *, int *);
|
|
|
|
int Func(int Param, long long Param2) {
|
|
int Result = Param;
|
|
|
|
{{{{
|
|
char c; int X;
|
|
EF1(&Result, &c, &X);
|
|
}}}}
|
|
return Result;
|
|
}
|
|
|
|
|
|
short FunFunc(long long x, char z) {
|
|
return x+z;
|
|
}
|
|
|
|
unsigned castTest(int X) { return X; }
|
|
|
|
double TestAdd(double X, float Y) {
|
|
return X+Y+.5;
|
|
}
|
|
|
|
int func(int i, int j) {
|
|
while (i != 20)
|
|
i += 2;
|
|
|
|
j += func(2, i);
|
|
return (i * 3 + j*2)*j;
|
|
}
|
|
|
|
int SumArray(int Array[], int Num) {
|
|
int i, Result = 0;
|
|
for (i = 0; i < Num; ++i)
|
|
Result += Array[i];
|
|
|
|
return Result;
|
|
}
|
|
|
|
int ArrayParam(int Values[100]) {
|
|
return EF1((int*)Values[50], 0, &Values[50]);
|
|
}
|
|
|
|
int ArrayToSum(void) {
|
|
int A[100], i;
|
|
for (i = 0; i < 100; ++i)
|
|
A[i] = i*4;
|
|
|
|
return A[A[0]]; //SumArray(A, 100);
|
|
}
|
|
|
|
int ExternFunc(long long, unsigned*, short, unsigned char);
|
|
|
|
int main(int argc, char *argv[]) {
|
|
unsigned i;
|
|
|
|
ExternFunc(-1, 0, (short)argc, 2);
|
|
//func(argc, argc);
|
|
|
|
for (i = 0; i < 10; i++)
|
|
puts(argv[3]);//"Hello world");
|
|
return 0;
|
|
}
|
|
|
|
double MathFunc(double X, double Y, double Z,
|
|
double AA, double BB, double CC, double DD,
|
|
double EE, double FF, double GG, double HH,
|
|
double aAA, double aBB, double aCC, double aDD,
|
|
double aEE, double aFF) {
|
|
return X + Y + Z + AA + BB + CC + DD + EE + FF + GG + HH
|
|
+ aAA + aBB + aCC + aDD + aEE + aFF;
|
|
}
|
|
|
|
|
|
|
|
void strcpy(char *s1, char *s2) {
|
|
while (*s1++ = *s2++);
|
|
}
|
|
|
|
void strcat(char *s1, char *s2) {
|
|
while (*s1++);
|
|
s1--;
|
|
while (*s1++ = *s2++);
|
|
}
|
|
|
|
int strcmp(char *s1, char *s2) {
|
|
while (*s1++ == *s2++);
|
|
if (*s1 == 0) {
|
|
if (*s2 == 0) {
|
|
return 0;
|
|
} else {
|
|
return -1;
|
|
}
|
|
} else {
|
|
if (*s2 == 0) {
|
|
return 1;
|
|
} else {
|
|
return (*(--s1) - *(--s2));
|
|
}
|
|
}
|
|
}
|