A simple VLIW instruction (taken from the FreeScale StarCore processor):
asrr #3,d0 tfr d0,d1 move.w #5,d0
All three operations occur in parallel and are part of a single instruction.
Another StarCore instruction with 6 parallel operations (uses brackets to spans multiple lines for readability):
1 2 3 4 5 6
|
label32:
[
mac d0,d1,d2 mac d3,d4,d5 ; multiply operands
add d0,d1,d3 add d3,d4,d6 ; add operands
move.f (r0)+,d0 move.w (r1)+,d1 ; load new operands
]
|
More complex VLIW instructions on other architectures add conditional tests for each operation, so a single instruction can contain operations which are always executed, operations which are executed only if the condition flag is set, and operations which are executed only if the condition flag is cleared.
Many instruction sets (including the IA-32 and IA-64 architectures) support instruction prefixes or qualifiers such as "REP", "LOCK", or "NOIRQ". This would change the instruction format given by hamsterman to
[label:] [prefix] instruction arg, arg, arg
with optional labels and optional prefixes (in addition to zero or more arguments).
Even the format for an arg is going to be hard to nail down. Some architectures have arguments with spaces in them (ARM's "R1, LSL #4" and "R1, ROR R3" arguments), while other architectures need to use spaces to distinguish between arguments are new operations.