... | ... | @@ -13,7 +13,7 @@ See also [cmm-type][6]. |
|
|
|
|
|
## Cmm hand-writing syntax
|
|
|
|
|
|
Following syntax was manually extracted from [`GHC/Cmm/Parser.y`][1] at commit 7750bd45.
|
|
|
Following syntax was manually extracted from [`GHC/Cmm/Parser.y`][1] at commit 5618fc21.
|
|
|
|
|
|
|
|
|
```
|
... | ... | @@ -52,7 +52,7 @@ maybe_body → ';' |
|
|
|
|
|
info → NAME
|
|
|
| 'INFO_TABLE' '(' NAME ',' INT ',' INT ',' INT ',' STRING ',' STRING ')'
|
|
|
| 'INFO_TABLE_FUN' '(' NAME ',' INT ',' INT ',' INT ',' STRING ',' STRING ',' INT ')'
|
|
|
| 'INFO_TABLE_FUN' '(' NAME ',' INT ',' INT ',' INT ',' STRING ',' STRING ',' INT ',' INT ')'
|
|
|
| 'INFO_TABLE_CONSTR' '(' NAME ',' INT ',' INT ',' INT ',' INT ',' STRING ',' STRING ')'
|
|
|
| 'INFO_TABLE_SELECTOR' '(' NAME ',' INT ',' INT ',' STRING ',' STRING ')'
|
|
|
| 'INFO_TABLE_RET' '(' NAME ',' INT ')'
|
... | ... | @@ -79,6 +79,8 @@ names → NAME |
|
|
stmt → ';'
|
|
|
| NAME ':'
|
|
|
| lreg '=' expr ';'
|
|
|
| lreg '=' mem_ordering type '[' expr ']' ';'
|
|
|
| mem_ordering type '[' expr ']' '=' expr ';'
|
|
|
| type '[' expr ']' '=' expr ';'
|
|
|
| foreign_results 'foreign' STRING foreignLabel '(' cmm_hint_exprs0 ')' safety opt_never_returns ';'
|
|
|
| foreign_results 'prim' '%' NAME '(' exprs0 ')' ';'
|
... | ... | @@ -100,6 +102,11 @@ stmt → ';' |
|
|
unwind_regs → GLOBALREG '=' expr_or_unknown ',' unwind_regs
|
|
|
| GLOBALREG '=' expr_or_unknown
|
|
|
|
|
|
mem_ordering → 'relaxed'
|
|
|
| 'release'
|
|
|
| 'acquire'
|
|
|
| 'seq_cst'
|
|
|
|
|
|
expr_or_unknown → 'return'
|
|
|
| expr
|
|
|
|
... | ... | @@ -175,10 +182,13 @@ expr0 → INT maybe_ty |
|
|
| FLOAT maybe_ty
|
|
|
| STRING
|
|
|
| reg
|
|
|
| type '[' expr ']'
|
|
|
| type dereference
|
|
|
| '%' NAME '(' exprs0 ')'
|
|
|
| '(' expr ')'
|
|
|
|
|
|
dereference → '^' '[' expr ']'
|
|
|
| '[' expr ']'
|
|
|
|
|
|
maybe_ty → {- empty -}
|
|
|
| '::' type
|
|
|
|
... | ... | @@ -290,6 +300,7 @@ Built-in primitives (machOps): |
|
|
%eq
|
|
|
%ne
|
|
|
%mul
|
|
|
%mulmayoflo
|
|
|
%neg
|
|
|
%quot
|
|
|
%rem
|
... | ... | @@ -353,6 +364,44 @@ Built-in primitives (machOps): |
|
|
Built-in callish primitives (callishMachOps):
|
|
|
|
|
|
```
|
|
|
%pow64f
|
|
|
%sin64f
|
|
|
%cos64f
|
|
|
%tan64f
|
|
|
%sinh64f
|
|
|
%cosh64f
|
|
|
%tanh64f
|
|
|
%asin64f
|
|
|
%acos64f
|
|
|
%atan64f
|
|
|
%asinh64f
|
|
|
%acosh64f
|
|
|
%log64f
|
|
|
%log1p64f
|
|
|
%exp64f
|
|
|
%expM164f
|
|
|
%fabs64f
|
|
|
%sqrt64f
|
|
|
|
|
|
%pow32f
|
|
|
%sin32f
|
|
|
%cos32f
|
|
|
%tan32f
|
|
|
%sinh32f
|
|
|
%cosh32f
|
|
|
%tanh32f
|
|
|
%asin32f
|
|
|
%acos32f
|
|
|
%atan32f
|
|
|
%asinh32f
|
|
|
%acosh32f
|
|
|
%log32f
|
|
|
%log1p32f
|
|
|
%exp32f
|
|
|
%expM132f
|
|
|
%fabs32f
|
|
|
%sqrt32f
|
|
|
|
|
|
%read_barrier
|
|
|
%write_barrier
|
|
|
%memcpy
|
... | ... | @@ -360,35 +409,24 @@ Built-in callish primitives (callishMachOps): |
|
|
%memmove
|
|
|
%memcmp
|
|
|
|
|
|
%suspendThread
|
|
|
%resumeThread
|
|
|
|
|
|
%prefetch0
|
|
|
%prefetch1
|
|
|
%prefetch2
|
|
|
%prefetch3
|
|
|
|
|
|
%popcnt8
|
|
|
%popcnt16
|
|
|
%popcnt32
|
|
|
%popcnt64
|
|
|
|
|
|
%pdep8
|
|
|
%pdep16
|
|
|
%pdep32
|
|
|
%pdep64
|
|
|
|
|
|
%pext8
|
|
|
%pext16
|
|
|
%pext32
|
|
|
%pext64
|
|
|
|
|
|
%cmpxchg8
|
|
|
%cmpxchg16
|
|
|
%cmpxchg32
|
|
|
%cmpxchg64
|
|
|
|
|
|
%xchg8
|
|
|
%xchg16
|
|
|
%xchg32
|
|
|
%xchg64
|
|
|
%popcnt
|
|
|
%pdep
|
|
|
%pext
|
|
|
%cmpxchg
|
|
|
%xchg
|
|
|
%load_relaxed
|
|
|
%load_acquire
|
|
|
%load_seqcst
|
|
|
%store_release
|
|
|
%store_seqcst
|
|
|
```
|
|
|
|
|
|
Built-in statement macros (stmtMacros):
|
... | ... | @@ -405,6 +443,8 @@ Built-in statement macros (stmtMacros): |
|
|
SAVE_THREAD_STATE
|
|
|
SAVE_REGS
|
|
|
RESTORE_REGS
|
|
|
PUSH_ARG_REGS
|
|
|
POP_ARG_REGS
|
|
|
LDV_ENTER
|
|
|
LDV_RECORD_CREATE
|
|
|
PUSH_UPD_FRAME
|
... | ... | |