A Retargetable C Compiler Design and Implementation 一本详细讨论lcc的著作
2021-11-15 10:56:03 17.31MB 可重定向 C编译器 设计与实现
1
用cygwin编译的erpcgen,可以windows下直接通过IDL编译生成client/server端(C++)代码,有cygwin的童鞋也可以自行编译,很方便的。 erpc git仓位置: https://github.com/EmbeddedRPC/erpc
2021-11-14 22:32:12 5.08MB eRPC IDL compiler erpcgen
1
c-减编译器 概述 C-Minus 是 C 的极度简化版本。可以在 [此处]( ) 找到规范。 这是一个非常基本的 C-Minus 编译器,没有优化。 要运行,请输入以下命令: yacc -d cminus.y lex cminus.lex cc lex.yy.c y.tab.c emitcode.c symtable.c ./a.out << 'sourcecode' 编译器将编写一个 output.asm 文件,该文件将包含 nasm 格式的 x86 汇编代码。 它还添加了对 C 函数 printf 的调用,以打印具有 1 的任何函数的返回值。 您可以使用 nasm 和 gcc 进行组装和链接。 nasm -f elf -g -F stabs output.asm -l output.lst gcc –m32 output.o –o output 代码遵循 Linux 调用约
2021-11-10 16:44:23 9KB C
1
2-4章200页中有大量内容放到词法分析/语法分析上,这个问题基本上已经被自动化工具解决了(众所周知的lex和yacc) 5-7章分别是中间形式、过程抽象、代码形式方面的内容。第6章包含了很多重要而散碎的内容,过程抽象这个标题有点太小。面向对象方面的内容浅尝辄止,而并行和异常方面的内容干脆就略去了。 8-10章为代码分析和优化,透彻介绍了静态唯一形式表示法。这部分有很多基本知识,但忽略了数组方面几乎所有重要的内容。 第11-13章介绍了指令选择、调度、寄存器分配的基本知识。 尽管它提到了一些硬件效应,如超标量体系结构上的乱序执行,但讨论仍然比较贴近流行处理器的指令集。它省略了SIMD、VLIW、DSP和更多奇异的体系结构,而这些都需要良好的代码生成来支撑。
2021-11-09 20:00:36 181.55MB compiler
1
Cypress与HI-TECH发布最新编译器,加倍PSoC器件的存储能力 Cypress半导体公司和HI-TECH Software日前宣布了一项新的编译技术,能够扩展动态可配置PSoC混合信号阵列的存储容量和性能。这款新的ANSI C编译器,即面向PSoC混合信号阵列的HI-TECH C PRO,开拓了HI-TECH的Omniscient Code Generation(全知代码生成,OCG)技术,能够从根本上降低PSoC的代码量。 PSoC混合信号阵列集成了可编程的模拟和混合功能,带有一个8位MCU内核,高达32KB闪存和高达2KB的SRAM。能够广泛用于成本敏感、空间受限的消费类应用,包括触摸屏接口、电动机控制以及近感探测及其它。PSoC设备能够进行动态重配,在相同硅片上执行多个独立的功能,因此能够减少元器件数量、缩减电路板空间,并降低功耗。 虽然在PSoC器件上增加可重置功能并不会增加对硅芯片的需求量,但是每一个可重置功能都需要额外的程序代码。在一些应用中,附加功能的增加将导致程序代码量大于片上闪存。此外,较大的软件栈和变量需求也可能使片上SRAM达到极限,从而增加未发现的栈溢出的可能性。截至目前,解决SRAM和闪存局限的做法是:1)限制终端产品的功能,2)将应用移植到更为昂贵、带更多SRAM和闪存的PSoC器件,或者3)手动进行代码的汇编工作,从而减少程序、栈和变量所占空间-一个非常麻烦且耗时的任务,在很大程度上会限制编程代码的可移植性。但是事实上,所有这些选择都不具备足够的吸引力。 面向PSoC混合信号阵列的HI-TECH C PRO编译器使用OCG技术,可以在编译前检查所有的程序模块,从而优化指针、寄存器和栈分配,并减少冗余代码。这款编译器还能够释放SRAM,并通过直接编译可寻址的优化功能栈(面向所有非递归和不可重入代码),达到减少对PSoC器件变址寄存器的资源争夺。由于代码量减少使执行周期变少,所以新编译器能够提高PSoC器件的性能。 与那些宣称“全局优化”,但是却仅在单独的程序模块中运行的寄存器有所不同,Omniscient Code Generation会检查全部程序中的每个模块,并对所有编程模块进行优化。PSoC器件中的C语言代码(使用OCG技术进行编译)量,仅仅是其它竞争型编译器所产生代码量的50%,从而使任意PSoC器件片上闪存的程序代码有效存储量翻番。既然执行的代码数量得到减少,那么性能自然得以提升。 SRAM的使用率更是得到了提高,因为OCG了解并且对变量和编译栈所需要的存储容量进行准确分配,甚至能够决定指针变量的范围,并在可能的情况下分配单字节指针。这样做的效果,就是编译器增加了SRAM的可用性,有的时候甚至能提高相当大的百分比。此外,通过对程序所需的最大深度静态设置栈,OCG潜在阻止了灾难性的栈溢出。 基于所有程序模块的调用关系图和指针引用图。在进行编译的准备过程中,OCG编译器会针对程序中的每个模块生成部分编译过的代码库。然后,它会针对所有这些库功能(在程序中随处进行引用)进行寻找,并建立一个“调用关系图”。一旦调用关系图完成,那些从来不被调用的功能被移除,编译器对那些被称为可重入(re-entrantly)的功能进行辨别和标注,例如来自主代码行的功能以及中断功能。 OCG编译器还能够在每个程序模块中生成任意指针的指针引用图。由于编译器知道指针指明的对象大小,所以它能够发现任意对静态分配对象的访问,从而提醒编程人员可能的无效存储访问。那些从来没有初始化的指针会被发现,并在编译过程中给予适当警告。此外,该编译器为开发人员提供了一个有价值的调试工具,能够显示所有指针和其指定目标的报告。 该款编译器还能够识别不同源文件中的变量或对象的不相符的声明,并对使用者发出警告。 通过优化变量和栈释放SRAM。传统的编译器通常会对变量所占空间做最坏打算,这样一来就导致了SRAM资源的利用不足。既然编译器知道所有变量的大小,那么它就能够根据每个变量实际需要的内存大小进行分配,根据应用的不同,释放10%甚至更多的SRAM空间。 就像许多低成本的8位可编程产品,PSoC混合信号阵列使用相同的SRAM空间储存软件功能栈和数据变量。如果为动态栈的最大深度分配的SRAM空间不足,那么栈就会溢出到数据变量空间,从而导致程序出错。 多数功能都是不可重入和非递归的,而且可以借助一个可预测的静态编译栈实现。该编译器的OCG技术检查所有的程序模块,识别所有的不可重归和非递归功能,并且利用恰如其分的内存容量来编译和优化一定大小的功能栈,从而容纳每一个功能的最大深度。既然已经确定了调用关系图,那么在不同时间内执行的功能可以针对其静态编译栈分享相同的SRAM空间。这样的特性将栈空间降低到必需的绝对极小值,从而为数据
2021-11-09 16:56:16 4.8MB Cypress
1
今天小编就为大家分享一篇关于IntelliJ IDEA报错Error:java: Compilation failed: internal java compiler error的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
2021-11-05 21:18:45 205KB intellij idea intellij idea报错
1
Dev_Cpp_5.11_TDM_GCC_4.9.2_Setup 最简单好用的c、c++编译软件==============
2021-11-05 19:23:29 48.1MB compiler
1
数据分析的经典教材,适合优化,程序行为分析,等领域
2021-11-02 13:56:29 4.87MB Data Flow Analysis Compiler Program
1
Hikari:LLVM混淆器
2021-11-01 19:39:16 943KB security compiler llvm obfuscator
1
LLVM入门教程 该版本官方授权 请勿做任何商业 采纳了谷歌翻译,可能存在不正确的语言序 每个教程目录下都有对应源码 gitbook的目录已经写好,大家可以向下下来转gitbook来方便自己阅读 万花筒:用LLVM实现的语言(备注:万花筒(Kaleidoscope)是LLVM实现的语言名称) 在LLVM中重建JIT
2021-10-26 15:58:42 336KB compiler llvm ast zh-cn
1