Changes between Version 2 and Version 3 of Commentary/Compiler/Backends/LLVM/Design
- Timestamp:
- 02/24/10 19:45:53 (3 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Commentary/Compiler/Backends/LLVM/Design
v2 v3 176 176 These are all the available `callee save` registers on x86. `callee save` are used as in ghc generated code now saving and restoring of these registers are needed due to there new special use and because GHC uses continuation passing style, so a `'ret'` statement is never actually generated. And since they are `callee save`, foreign code can also be called without any need to handle the `Cmm` registers. 177 177 178 == `CmmData`==178 == !CmmData == 179 179 180 180 `CmmData` takes the following form: … … 208 208 All `CmmStatic` is translated to LLVM structures. 209 209 210 == `CmmStaticLit`==210 == !CmmStaticLit == 211 211 212 212 These are translated when possible as follows: … … 219 219 * `CmmHighStackMark` -> Panic occurs if this type is encountered. 220 220 221 ==== `CmmUninitialised`====221 ==== !CmmUninitialised ==== 222 222 223 223 For this, a zeroed array of `8bit` values is created of correct size. 224 224 225 ==== `CmmAlign` & `CmmDataLabel`====225 ==== !CmmAlign & !CmmDataLabel ==== 226 226 227 227 The LLVM back-end can't handle `CmmAlign` or `CmmDataLabel`. A panic occurs if either is encountered. A `CmmDataLabel` is expected at the very start of each list of `CmmStatic`. It is removed and used as the name for the structure and constant instance. 228 228 229 ==== `CmmString`====229 ==== !CmmString ==== 230 230 231 231 This is translated into a LLVM string. Ascii characters are used when they are printable, escaped hex values otherwise. A null termination is added. … … 243 243 Where i32 is the pointer size. (i64 if on 64 bit). 244 244 245 == `CmmProc`==245 == !CmmProc == 246 246 247 247 TODO
