- 所有 tcc 文件/内容/宏改名为 pcc (tcc.c->pcc.c, tccelf.c->pccelf.c, libtcc.c->libpcc.c 等) - 支持架构: i386, x86_64, ARM, ARM64, RISC-V, C67 - 支持格式: PE, ELF, Mach-O, COFF - 完整预处理、代码生成、链接器、调试信息 - 构建成功: pcc.exe (x86_64 Windows) - 功能测试通过: 递归/结构体/浮点/switch/循环 - 自编译测试通过: pcc 可以编译自身
36 行
1.4 KiB
C
36 行
1.4 KiB
C
#include <stdio.h>
|
|
#include <windows.h>
|
|
|
|
#define PTR(x) ((PVOID)(ULONG_PTR)(x))
|
|
#define CHECK(name, expr) printf("%s: %s\n", name, (expr) ? "yes" : "no")
|
|
|
|
int main(void)
|
|
{
|
|
PVOID volatile slot = PTR(0x1111222233334444ULL);
|
|
PVOID old;
|
|
|
|
old = InterlockedExchangePointer(&slot, PTR(0x5555666677778888ULL));
|
|
CHECK("exchange old", old == PTR(0x1111222233334444ULL));
|
|
CHECK("exchange stored", slot == PTR(0x5555666677778888ULL));
|
|
|
|
old = InterlockedCompareExchangePointer(&slot,
|
|
PTR(0x9999aaaabbbbccccULL),
|
|
PTR(0x5555666677778888ULL));
|
|
CHECK("compare old", old == PTR(0x5555666677778888ULL));
|
|
CHECK("compare stored", slot == PTR(0x9999aaaabbbbccccULL));
|
|
|
|
old = InterlockedCompareExchangePointerAcquire(&slot,
|
|
PTR(0xdddd111122223333ULL),
|
|
PTR(0x0123456789abcdefULL));
|
|
CHECK("acquire old", old == PTR(0x9999aaaabbbbccccULL));
|
|
CHECK("acquire stored", slot == PTR(0x9999aaaabbbbccccULL));
|
|
|
|
old = InterlockedCompareExchangePointerRelease(&slot,
|
|
PTR(0xdddd111122223333ULL),
|
|
PTR(0x9999aaaabbbbccccULL));
|
|
CHECK("release old", old == PTR(0x9999aaaabbbbccccULL));
|
|
CHECK("release stored", slot == PTR(0xdddd111122223333ULL));
|
|
|
|
return 0;
|
|
}
|