E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
GCC-3.4.6
Studying note of
GCC-3.4.6
source (63)
4.3.1.7.7. C++componentswithC++linkage4.3.1.7.7.1. bad_alloccurrent_lang_nameindicatesthelanguageoftheprogram,nowitisupdatedtotheidentifierofC++language.Itdeterminesthelinkageofidentifie
wuhui_gdnt
·
2010-07-23 11:00
exception
function
tree
Build
library
inheritance
GCC-3.4.6
源代码学习笔记(63)
4.3.1.7.7. 具有C++链接性的C++语言成分4.3.1.7.7.1. bad_alloccurrent_lang_name表示程序所用的语言,现在它被更新为表示C++语言的标识符。它确定了标识符的链接性。例如,C++的标识符需要其名字被修饰,而C的标识符是不需要的。 cxx_init_decl_processing(continue) 3080 /*Now
wuhui_gdnt
·
2010-07-23 11:00
exception
list
tree
Build
library
inheritance
Studying note of
GCC-3.4.6
source (62)
4.3.1.7.6. OtherC++componentswithClinkage4.3.1.7.6.1. PartcomplyingstandardWalktegotherwithc_common_nodes_and_builtinsforalongjourney,nowwereturnbacktocxx_init_decl_processing.Notethatcu
wuhui_gdnt
·
2010-07-23 11:00
java
exception
tree
Integer
application
Build
GCC-3.4.6
源代码学习笔记(62)
4.3.1.7.6. 其它具有C链接性的C++语言成分4.3.1.7.6.1. 标准部分和c_common_nodes_and_builtins走过一长段路程后,我们回到cxx_init_decl_processing。注意current_lang_name仍然是lang_name_c,表明下面构建的节点仍然是C链接性的。3002~3009的类型节点用于C++和Java
wuhui_gdnt
·
2010-07-23 11:00
java
exception
tree
Integer
processing
Build
Studying note of
GCC-3.4.6
source (61)
4.3.1.7.5.6.5.2. HandleattributeofformatForfunctionofprintf,scanfetctype,therealcheckingcouldbedoneonlyatsiteofinvocation.Initsdeclaraction,fewcheckingcanbetakenashandle_format_attributedoes.Now
wuhui_gdnt
·
2010-07-16 11:00
function
String
tree
null
attributes
Types
Studying note of
GCC-3.4.6
source (60)
4.3.1.7.5.6.5. Processingattributesofbuiltin4.3.1.7.5.6.5.1. InstallattributehandlersThoughwecreatenodesforattributesofbuiltinfunctions,westilldon’tinstallthemintothebuiltinfunction.
wuhui_gdnt
·
2010-07-16 10:00
function
struct
tree
table
attributes
Types
GCC-3.4.6
源代码学习笔记(61)
4.3.1.7.5.6.5.2. 处理format属性对于printf,scanf等类型的函数,真正的检查要在调用处进行。在其声明中,只进行少许检查,由handle_format_attribute执行。现在参数args是节点ATTR_PRINTF_1_0,而传入的no_add_attrs是0。 2741 tree2742 handle_format_attribute(tree*
wuhui_gdnt
·
2010-07-16 10:00
GCC-3.4.6
源代码学习笔记(60)
4.3.1.7.5.6.5. 处理内建函数的属性4.3.1.7.5.6.5.1. 建立属性处理方法虽然我们已经为内建函数的属性创建了节点,我们还未将它们加入到内建函数的节点中。而且即使没有属性,我们也需要在函数节点中明确地表示出来。 builtin_function_1(continue) 3253 /*Possiblyapplysomedefaultatt
wuhui_gdnt
·
2010-07-16 10:00
Studying note of
GCC-3.4.6
source (58)
4.3.1.7.5.4. NodesofbuiltinfunctiontypesFromherebelow,wewillmeetFUNCTION_DECLandFUNCTION_TYPEhereandthere.Asweknow,inC,afunctionisassociatedwithatype.Forexample,inta(intA);andintb(intB),bothfuncti
wuhui_gdnt
·
2010-07-14 10:00
function
list
tree
null
attributes
Types
GCC-3.4.6
源代码学习笔记(58)
4.3.1.7.5.4. 内建函数类型节点从这里开始,我们将多次看到FUNCTION_DECL及FUNCTION_TYPE。正如我们所了解的,在C/C++中,函数具有类型。例如,“inta(intA);”及“intb(intB);”,这2个函数具有相同的类型(它们都可以被指针类型“int(*)(int)”所指向)。但它们是同一类型的2个不同的声明,它们的行为可以完全相异。你可以说类型有点类
wuhui_gdnt
·
2010-07-14 10:00
list
function
tree
null
attributes
Types
Studying note of
GCC-3.4.6
source (57)
4.3.1.7.5.3. NodesofotherbuiltintypesNextpartofc_common_nodes_and_builtinsisgivenbelow: c_common_nodes_and_builtins(continue) 3177 build_common_tree_nodes_2(flag_short_double);3178 3179 recor
wuhui_gdnt
·
2010-07-13 09:00
vector
list
tree
Integer
Build
float
Studying note of
GCC-3.4.6
source (56)
4.3.1.7.5. CreatenodesofbuiltinsGCCoffersafacilitynamebuiltinfunctions.Theyjustactasfunctionsfromlibraryweusuallyusedincoding.Infactyoucanusethesebuiltinsinyouprogramaslibraryfunction,andyou
wuhui_gdnt
·
2010-07-13 09:00
function
tree
Integer
Build
binding
Types
GCC-3.4.6
源代码学习笔记(57)
4.3.1.7.5.3. 其他内建类型节点c_common_nodes_and_builtins接下来的代码如下: c_common_nodes_and_builtins(continue) 3177 build_common_tree_nodes_2(flag_short_double);3178 3179 record_builtin_type(RID_FLOAT,NULL,
wuhui_gdnt
·
2010-07-13 09:00
vector
list
tree
Integer
Build
float
GCC-3.4.6
源代码学习笔记(56)
4.3.1.7.5. 内建对象的节点GCC提供了一个称为内建函数的设施。它们的行为与我们编程时用到的库函数类似。事实上你可以你的程序中象使用库函数那样使用这些内建函数,你甚至不需要包含任何头文件。显然,这些函数不会是,我们从头文件看到的,那种函数声明的形式。它们不能出现在任何头文件中。这些函数在GCC内部得到处理,它们必须是rtx的形式。某些函数只是表明了期望的操作,在展开后它
wuhui_gdnt
·
2010-07-13 09:00
function
tree
null
Integer
Build
binding
Studying note of
GCC-3.4.6
source (55)
4.3.1.7.4. Createnamespace“std”4.3.1.7.4.1. Addinglobalnamespace“std”namespaceispartofthestandaer.AndthisnamespaceisalsopartoftheC++runtimeenvironment,forexample,theexceptionmechanism,ru
wuhui_gdnt
·
2010-07-08 14:00
function
tree
null
Class
binding
NameSpaces
Studying note of
GCC-3.4.6
source (54)
4.3.1.7.3. BuildTreeNodeofTypeInformationThenGCCwillfinializethechoiceofinliningfunctionstoflag_inline_trees,andabandonothers.Forptrmemfunc_vbit_in_pfnatline2983,itisenumtypeptrmemfunc_vbit_
wuhui_gdnt
·
2010-07-08 14:00
function
tree
Integer
Build
alignment
Pointers
GCC-3.4.6
源代码学习笔记(54)
4.3.1.7.3. 类型信息树节点回到cxx_init_decl_processing,接下来GCC将最终确定的内联函数的选项置入flag_inline_trees。2983行的ptrmemfunc_vbit_in_pfn是枚举类型ptrmemfunc_vbit_where_t。 2048 enumptrmemfunc_vbit_where_t
wuhui_gdnt
·
2010-07-08 14:00
Studying note of
GCC-3.4.6
source (53)
4.3.1.7.2.4. EntityforglobalnamespaceTheidentifierofglobalnamespaceisglobal_scope_name,anditsfront-endtreenodehascodeNAMESPACE_DECL.Asnamespacehasn’ttypeinformation,soparametertypeofbelowfunctioni
wuhui_gdnt
·
2010-07-02 09:00
struct
function
tree
table
binding
destructor
Studying note of
GCC-3.4.6
source (52)
4.3.1.7. InitializefordeclarationprocessingDeclarationisimportantpartofC++.Itisfunctiondeclaration,variabledeclaration,typedeclaration,namespacedeclaration,etc.givesC++powerandflexibility.IntheC++co
wuhui_gdnt
·
2010-07-02 09:00
GCC-3.4.6
源代码学习笔记(53)
4.3.1.7.2.4. 全局名字空间对象全局名字空间的标识符是global_scope_name,其对应的树节点的编码是NAMESPACE_DECL,名字空间本身没有类型信息,是故下面的参数type为void_type_node。 687 tree688 build_lang_decl(enumtree_codecode,treename,treetype)
wuhui_gdnt
·
2010-07-02 09:00
struct
function
tree
table
binding
destructor
GCC-3.4.6
源代码学习笔记(52)
4.3.1.7. 初始化声明处理机制声明是C++最重要的一部分。正是函数声明、类型声明、名字空间声明、变量声明等,构成了C++强大灵活的特性。C++编译器中这部分机制的初始化显得十分重要而复杂,这个机制还生成了语言运行时环境。 cxx_init(continue) 410 cxx_init_decl_processing(); 2942void2943cxx_init_decl_proces
wuhui_gdnt
·
2010-07-02 09:00
Studying note of
GCC-3.4.6
source (51)
4.3.LanguagedependentinitializationBacktodo_compile,nextcallslang_dependent_init. do_compile(continue) 4650 /*Language-dependentinitialization.Returnstrueonsuccess. */4651 if(lang_dependent_init
wuhui_gdnt
·
2010-06-22 09:00
function
struct
tree
basic
Class
compiler
GCC-3.4.6
源代码学习笔记(51)
4.3.语言相关的初始化回到do_compile,下一个被调用的是lang_dependent_init。 do_compile(continue) 4650 /*Language-dependentinitialization.Returnstrueonsuccess. */4651 if(lang_dependent_init(main_input_filename))4652
wuhui_gdnt
·
2010-06-22 09:00
Studying note of
GCC-3.4.6
source (50)
4.2.11. UpdateinformationabouthardregistersusedbycallBacktobackend_init,ifthesourceiscompiledwithoptimizationofthesizeorwithoptimizationlevelhigherthan–O2,flag_caller_saveswillbetrue.Theninit_call
wuhui_gdnt
·
2010-06-21 10:00
function
object
Class
optimization
Parsing
compilation
GCC-3.4.6
源代码学习笔记(50)
4.2.11. 更新用于函数调用的物理寄存器信息回到backend_init,如果源代码要进行尺寸优化或者优化级别高于–O2,flag_caller_saves将是true。那么init_caller_save被调用。在这里我们关注所有被函数调用使用的物理寄存器,并且它们没有被排除在跨函数调用外(由regclass.c中的fixed_regs,call_used_regs等所指定)。注意到
wuhui_gdnt
·
2010-06-21 10:00
优化
function
Class
Parsing
Allocation
compilation
GCC-3.4.6
源代码学习笔记(48续)
4.2.10.评估算术操作的代价4.2.10.1.创建伪函数上下文回到backend_init,下来是init_dummy_function_start。它初始化了rtl的展开机制,因而我们可以进行一些简单序列的生成。 6518void6519init_dummy_function_start(void)
wuhui_gdnt
·
2010-06-21 10:00
Studying note of
GCC-3.4.6
source (49)
4.2.10.2. CollectdataAftercreatingdummyfunctioncontext,backtobackend_init,followingisinit_expmed.init_expmedfirstcallsstart_sequencetopreparethertlgeneration. 102 void103 init_expmed(void)
wuhui_gdnt
·
2010-06-18 10:00
Studying note of
GCC-3.4.6
source (48)
4.2.8.Dataforprologue,epilogue,sibcallepilogueinfunctioninvocationInbackend_init,followinginvokesinit_function_once. 8140void8141init_function_once(void)
wuhui_gdnt
·
2010-06-18 10:00
function
struct
tree
Descriptor
alignment
Constants
GCC-3.4.6
源代码学习笔记(49)
4.2.10.2. 收集数据完成创建伪函数上下文的任务后,回到backend_init,跟着的是init_expmed。init_expmed首先调用start_sequence来为rtl的产生做准备。 102 void103 init_expmed(void)
wuhui_gdnt
·
2010-06-18 09:00
GCC-3.4.6
源代码学习笔记(48)
4.2.8.用于函数调用序幕、结尾,兄弟调用结尾的数据在backend_init中,接下来调用init_function_once。 8140void8141init_function_once(void) infunction.c8142{8143
wuhui_gdnt
·
2010-06-18 09:00
struct
function
tree
basic
Descriptor
statistics
Studying note of
GCC-3.4.6
source (47)
4.2.7.Prepareforreloadpass4.2.7.1. OverviewAfterinit_loopreturns,inbackend_init,nextcallsinit_reloadwhichprepareforreloadingpass.Whatdoesreloadingpassfor?Reloadingpassrenumberspseudoregisterswiththe
wuhui_gdnt
·
2010-06-09 10:00
object
function
report
null
Integer
structure
GCC-3.4.6
源代码学习笔记(47)
4.2.7.准备重装遍4.2.7.1. 概览从init_loop返回后,在backend_init中,接下来调用init_reload来为重装遍做准备。重装遍做什么用呢?重装遍使用所分配的物理寄存器的编号,重新编号对应的伪寄存器。没有分配到物理寄存器的伪寄存器将被栈槽(stackslot)所替代。然后查找,因为值不能放在寄存器,或者使用了错误的寄存器而非法的指令。再通过将问题值临时放入寄存器而
wuhui_gdnt
·
2010-06-09 09:00
vector
struct
report
null
Integer
structure
Studying note of
GCC-3.4.6
source (46)
4.2.6.Prepareforloopoptimizationpass4.2.6.1. OverviewBacktobackend_init,nextcallsinit_loop.Thisfunctionpreparessomevariablesforusinginloopoptimizationwhichmovesconstantexpressionsoutofloops,andoptio
wuhui_gdnt
·
2010-06-08 09:00
GCC-3.4.6
源代码学习笔记(46)
4.2.6.准备循环优化遍4.2.6.1. 概览回到backend_init,下一个调用init_loop。这个函数准备那些用于循环优化中的变量。这个优化把常量表达式移出循环体,并且可选地执行强度降低(strength-reduction,期间昂贵的操作被等效但更廉价的操作所替代)及循环展开(loopunrolling)。这个循环优化找出在循环中不依循环改变的计算(循环不变量)并将它们移到循环
wuhui_gdnt
·
2010-06-08 09:00
优化
struct
report
null
hook
structure
Studying note of
GCC-3.4.6
source (45)
4.2.3.3. Informationaboutregistersupportingauto-incr/decBacktoinit_regs,nextcallsinit_reg_autoinc.Thisfunctionforx86machinewillsetforbidden_inc_dec_classforallregisters,asx86hasn’tanysortofautoincre
wuhui_gdnt
·
2010-05-25 09:00
GCC-3.4.6
源代码学习笔记(45)
4.2.3.3. 支持自动增/减寄存器的信息回到init_regs,其次调用init_reg_autoinc。对于x86机器这个函数将对所有的寄存器设置forbidden_inc_dec_class,因为x86没有任何自增取址(autoincrementaddressing)。在下面的init_reg_autoinc中,FORBIDDEN_INC_DEC_CLASSES被定义,如果定义了宏SE
wuhui_gdnt
·
2010-05-25 09:00
function
table
Class
64bit
output
variables
Studying note of
GCC-3.4.6
source (44)
4.2.3.3. DeterminecostofmovingdatabetweenregistersFollowing,init_reg_sets_1evaluatesthecostofmovingdatabetweenregistersofdifferentclass,thenbetweenregisterandmemory. init_reg_sets_1(continue) 477 /
wuhui_gdnt
·
2010-05-18 09:00
Integer
Class
float
branch
parallel
Allocation
GCC-3.4.6
源代码学习笔记(44)
4.2.3.3. 确定寄存器间移动数据的代价接下来,init_reg_sets_1评估不同类别寄存器间移动数据的代价,而后是评估寄存器和内存之间。 init_reg_sets_1(continue) 477 /*Initializethemovecosttable.Findeverysubsetofeachclass478 andtakethemaximumcostofmovingan
wuhui_gdnt
·
2010-05-18 09:00
Integer
Class
float
branch
parallel
Allocation
Studying note of
GCC-3.4.6
source (43)
4.2.1.3.2.2. ObjectsforrealconstantFollowing,init_emit_oncegoestoinitializerealconstants. init_emit_once(continue) 5546 REAL_VALUE_FROM_INT(dconst0, 0, 0,double_mode);5547 REAL_VALUE_FROM_INT(d
wuhui_gdnt
·
2010-05-17 09:00
GCC-3.4.6
源代码学习笔记(43)
4.2.1.3.2.2. 浮点常量对象接下来,init_emit_once初始化浮点常量。 init_emit_once(continue) 5546 REAL_VALUE_FROM_INT(dconst0, 0, 0,double_mode);5547 REAL_VALUE_FROM_INT(dconst1, 1, 0,double_mode);5548 REAL_VALUE_
wuhui_gdnt
·
2010-05-17 09:00
Studying note of
GCC-3.4.6
source (42)
4.2.1.2. InitializehashtablesSimliarwiththefront-end,theback-endalsouseshashtabletocachecommonlyusedandsharedobjects.Inlatersections,withthecompilation,weseethemeaningoftheelementsinthesehashtable.T
wuhui_gdnt
·
2010-05-12 10:00
GCC-3.4.6
源代码学习笔记(42)
4.2.1.2. 初始化哈希表与前端相似,后端亦对常用、共享的对象使用哈希表。在以后的章节,结合编译过程,我们再来看这些哈希表中,元素的意义。接着在init_emit_once,5474到5494行,找出适合字节类型,字类型及double类型的模式,而ptr_mode在5494行由mode_for_size来确定。4.2.1.3. 创建Rtl对象4.2.1.3.1. R
wuhui_gdnt
·
2010-05-12 09:00
function
struct
Integer
Class
语言
extension
Studying note of
GCC-3.4.6
source (41)
4.2.Initializetheback-endAfterhandlingcommandoptions,do_compilewilldoinitializationforback-end. do_compile(continue) 4638 /*Don'tdoanymoreifanerrorhasalreadyoccurred. */4639 if(!errorcount)4640 {46
wuhui_gdnt
·
2010-05-05 09:00
vector
Class
constraints
64bit
macros
Numbers
GCC-3.4.6
源代码学习笔记(41)
4.2.初始化后端处理完命令行选项后,do_compile将初始化后端。 do_compile(continue) 4638 /*Don'tdoanymoreifanerrorhasalreadyoccurred. */4639 if(!errorcount)4640 {4641 /*Thismustberunalways,becauseitisneededtocomputetheFP
wuhui_gdnt
·
2010-05-05 09:00
vector
Class
constraints
FP
64bit
Numbers
Studying note of
GCC-3.4.6
source (40)
4.1.5.SettledownparametersAfteradjustingparametersforoptionsforthetarget,otherparameterscanbedeterminedfinallynow.Foreach-falign-*flags,thereisan*_logvariantwhichisthepoweroftwonotlessthanthevariable,
wuhui_gdnt
·
2010-05-04 09:00
function
underscore
Arrays
asynchronous
loops
debugging
GCC-3.4.6
源代码学习笔记(40)
4.1.5.最后确定参数在调整完用于目标平台的选项参数后,现在可以最后确定其他参数。对于每个-falign-*标识符,都有对应的*_log变量,其值为不小于这个变量值的最小2的指数倍数,用于.align输出。在下面4360行的INSN_SCHEDULING,及在4364行的DELAY_SLOTS由后端的工具getattrtab根据目标芯片定义。另外,下面的*_DEBUGGING_INFO指明了所产
wuhui_gdnt
·
2010-05-04 09:00
function
underscore
Arrays
asynchronous
loops
debugging
Studying note of
GCC-3.4.6
source (39)
4.1.4.AdjustoptionsaccordingtotargetReturnedfromc_common_post_options,continuewithprocess_options.Rememberthatinput_filenameaccessesfilefieldofinput_locationwhichtracksthecurrentfilebeingcompiled. pro
wuhui_gdnt
·
2010-04-30 11:00
String
table
compiler
asynchronous
64bit
loops
GCC-3.4.6
源代码学习笔记(39)
4.1.4.根据目标平台调整选项从c_common_post_options返回,继续process_options。回忆input_filename访问input_location的file域,这个域记录了当前正在编译的文件。 process_options(continue) 4283 input_filename=main_input_filename;42844285#ifdefOVER
wuhui_gdnt
·
2010-04-30 10:00
String
table
asynchronous
64bit
X86
loops
Studying note of
GCC-3.4.6
source (38)
4.1.3.1.2.3.1.1. #pragmainterfacepragmaimplementationAsextensiontoC++providedbyGCC,#pragmainterface“filename”(op)and#pragmaimplementation“filename”(op)aredescribedby[6].6.3VagueLinkageThereare
wuhui_gdnt
·
2010-04-29 10:00
GCC-3.4.6
源代码学习笔记(38)
4.1.3.1.2.3.1.1.#pragmainterface及#pragmaimplementation作为GCC提供的一个C++的扩展,【6】解释了#pragmainterface“filename”(op)及#pragmaimplementation“filename”(op)。6.3模糊链接性(VagueLinkage)在C++中有一些构造要求在目标文件中分配空间,但又不明确地绑定于单个
wuhui_gdnt
·
2010-04-29 10:00
interface
tree
struct
input
编译器
instantiation
上一页
1
2
3
4
5
6
7
8
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他