View source code
							
							
						
								Display the source code in dmd/backend/cod1.d from which this
								page was generated on github.
							
						
							Report a bug
							
						
								If you spot a problem with this page, click here to create a
								Bugzilla issue.
							
						
							
								Improve this page
							
							
					
								Quickly fork, edit online, and submit a pull request for this page.
								Requires a signed-in GitHub account. This works well for small changes.
								If you'd like to make larger changes you may want to consider using
								local clone.
							
						Module dmd.backend.cod1
Code generation 1
Handles function calls: putting arguments in registers / on the stack, and jumping to the function.
Compiler implementation of the D programming language.
Coverage
https://codecov.io/gh/dlang/dmd/src/master/src/dmd/backend/cod1.d
Functions
| Name | Description | 
|---|---|
								
									argtypes(t, arg1type, arg2type)
								
							 | 
							Finds replacement types for register passing of aggregates. | 
								
									buildEA(c, base, index, scale, disp)
								
							 | 
							Build an EA of the form disp[base][index*scale]. | 
								
									buildModregrm(mod, reg, rm)
								
							 | 
							Build REX, modregrm and sib bytes | 
								
									callclib(cdb, e, clib, pretregs, keepmask)
								
							 | 
							Generate code sequence to call C runtime library support routine. clib = CLIB.xxxx keepmask = mask of registers not to destroy. Currently can handle only 1. Should use a temporary rather than push/pop for speed. | 
								
									cdfunc(cdb, e, pretregs)
								
							 | 
							Generate code sequence for function call. | 
								
									cdisscaledindex(cdb, e, pidxregs, keepmsk)
								
							 | 
							Generate code for which isscaledindex(e) returned a non-zero result. | 
								
									cdstrthis(cdb, e, pretregs)
								
							 | 
							|
								
									fixresult(cdb, e, retregs, pretregs)
								
							 | 
							Given the result of an expression is in retregs, generate necessary code to return result in *pretregs. | 
								
									fltregs(cdb, pcs, tym)
								
							 | 
							Given an opcode and EA in cs, generate code for each floating register in turn. | 
								
									FuncParamRegs_create(tyf)
								
							 | 
							|
								
									genEEcode()
								
							 | 
							Generate code for eecontext | 
								
									gensaverestore(regm, cdbsave, cdbrestore)
								
							 | 
							Gen a save/restore sequence for mask of registers. | 
								
									genstackclean(cdb, numpara, keepmsk)
								
							 | 
							Clean parameters off stack. | 
								
									getaddrmode(idxregs)
								
							 | 
							Get addressing mode. | 
								
									getlvalue(cdb, pcs, e, keepmsk)
								
							 | 
							Compute addressing mode. Generate & return sequence of code (if any). Return in cs the info on it. | 
								
									getlvalue_lsw(c)
								
							 | 
							|
								
									getlvalue_msw(c)
								
							 | 
							|
								
									isscaledindex(e)
								
							 | 
							Determine if e is a 32 bit scaled index addressing mode. | 
								
									loaddata(cdb, e, pretregs)
								
							 | 
							Generate code to load data into registers. | 
								
									loadea(cdb, e, cs, op, reg, offset, keepmsk, desmsk)
								
							 | 
							Routine to aid in setting things up for gen(). Look for common subexpression. Can handle indirection operators, but not if they're common subs. | 
								
									logexp(cdb, e, jcond, fltarg, targ)
								
							 | 
							Generate code for a logical expression. | 
								
									offsetinreg(cdb, e, pretregs)
								
							 | 
							Get offset portion of e, and store it in an index register. Return mask of index register in *pretregs. | 
								
									paramsize(e, tyf)
								
							 | 
							Determine size of argument e that will be pushed. | 
								
									pushParams(cdb, e, stackalign, tyf)
								
							 | 
							Generate code to push argument e on the stack. stackpush is incremented by stackalign for each PUSH. | 
								
									regParamInPreg(s)
								
							 | 
							Determine if we should leave parameter s in the register it
 came in, or allocate a register it using the register
 allocator.
 | 
						
								
									tstresult(cdb, regm, tym, saveflag)
								
							 | 
							Given a result in registers, test it for true or false. Will fail if TYfptr and the reg is ES! If saveflag is true, preserve the contents of the registers. | 
Structs
| Name | Description | 
|---|---|
								
									Parameter
								
							 | 
							Helper function for converting OPparam's into array of Parameters. | 
Manifest constants
| Name | Type | Description | 
|---|---|---|
								
									INF32
								
							 | 
							if 32 bit only | |
								
									INF64
								
							 | 
							if 64 bit only | |
								
									INFfloat
								
							 | 
							if this is floating point | |
								
									INFpusheabcdx
								
							 | 
							pass EAX/EBX/ECX/EDX on stack, callee does ret 16 | |
								
									INFpushebx
								
							 | 
							push EBX before load_localgot() | |
								
									INFwkdone
								
							 | 
							if weak extern is already done | |
								
									SSFLlea
								
							 | 
							can do it in one LEA | |
								
									SSFLnobase
								
							 | 
							no base register | |
								
									SSFLnobase1
								
							 | 
							no base register for first LEA | |
								
									SSFLnobp
								
							 | 
							can't have EBP in relconst | 
Authors
License
					Copyright © 1999-2024 by the D Language Foundation | Page generated by ddox.