blob: 2419aaa0817eb9c882afa20447ddb43c2d68eede [file] [log] [blame]
# Copyright © 2024 Imagination Technologies Ltd.
# SPDX-License-Identifier: MIT
from pco_isa import *
from pco_ops import *
# Enum mappings.
class EnumMap(object):
def __init__(self, name, type_from, type_to, mappings, pass_zero_val):
self.name = name
self.type_from = type_from
self.type_to = type_to
self.mappings = mappings
self.pass_zero_val = pass_zero_val
enum_maps = {}
def enum_map(enum_from, enum_to, mappings, pass_zero=None):
# Only allow passing zero through if this is a bitset.
assert pass_zero is None or enum_from.enum.is_bitset
key = (enum_from, enum_to)
assert key not in enum_maps.keys(), f'Duplicate enum mapping for "{enum_from.tname}" to "{enum_to.tname}".'
assert enum_from.base_type == BaseType.enum
assert enum_to.base_type == BaseType.enum
# Ensure the validity of the enum_from elements.
assert set([from_elem for from_elem, to_elem in mappings]).issubset(set(enum_from.enum.elems.keys())), f'Invalid enum_from spec in enum mapping for "{enum_from.tname}" to "{enum_to.tname}".'
# Ensure the validity of the enum_to elements.
assert set([to_elem for from_elem, to_elem in mappings]).issubset(set(enum_to.enum.elems.keys())), f'Invalid enum_to spec in enum mapping for "{enum_from.tname}" to "{enum_to.tname}".'
_mappings = []
for elem_from, elem_to in mappings:
_mappings.append((enum_from.enum.elems[elem_from].cname, enum_to.enum.elems[elem_to].cname))
pass_zero_val = None
if pass_zero is not None:
if isinstance(pass_zero, int):
pass_zero_val = str(pass_zero)
else:
assert False
name = f'{prefix}_map_{enum_from.tname}_to_{enum_to.tname}'
enum_maps[key] = EnumMap(name, enum_from.name, enum_to.name, _mappings, pass_zero_val)
enum_map(OM_EXEC_CND.t, F_CC, [
('e1_zx', 'e1_zx'),
('e1_z1', 'e1_z1'),
('ex_zx', 'ex_zx'),
('e1_z0', 'e1_z0'),
])
enum_map(REG_CLASS, F_REGBANK, [
('temp', 'temp'),
('vtxin', 'vtxin'),
('coeff', 'coeff'),
('shared', 'shared'),
('index', 'idx0'),
('spec', 'special'),
('intern', 'special'),
('const', 'special'),
('pixout', 'special'),
('global', 'special'),
('slot', 'special'),
])
enum_map(REG_CLASS, F_IDXBANK, [
('temp', 'temp'),
('vtxin', 'vtxin'),
('coeff', 'coeff'),
('shared', 'shared'),
('index', 'idx'),
('pixout', 'pixout'),
])
enum_map(IO, F_IS0_SEL, [
('s0', 's0'),
('s1', 's1'),
('s2', 's2'),
('s3', 's3'),
('s4', 's4'),
('s5', 's5'),
])
enum_map(IO, F_IS1_SEL, [
('ft0', 'ft0'),
('fte', 'fte'),
])
enum_map(IO, F_IS2_SEL, [
('ft1', 'ft1'),
('fte', 'fte'),
])
enum_map(IO, F_IS3_SEL, [
('ft0', 'ft0'),
('ft1', 'ft1'),
('fte', 'fte'),
])
enum_map(IO, F_IS4_SEL, [
('ft0', 'ft0'),
('ft1', 'ft1'),
('ft2', 'ft2'),
('fte', 'fte'),
])
enum_map(IO, F_IS5_SEL, [
('ft0', 'ft0'),
('ft1', 'ft1'),
('ft2', 'ft2'),
('fte', 'fte'),
])
enum_map(OM_ITR_MODE.t, F_ITER_MODE, [
('pixel', 'pixel'),
('sample', 'sample'),
('centroid', 'centroid'),
])
enum_map(OM_PCK_FMT.t, F_PCK_FORMAT, [
('u8888', 'u8888'),
('s8888', 's8888'),
('o8888', 'o8888'),
('u1616', 'u1616'),
('s1616', 's1616'),
('o1616', 'o1616'),
('u32', 'u32'),
('s32', 's32'),
('u1010102', 'u1010102'),
('s1010102', 's1010102'),
('u111110', 'u111110'),
('s111110', 's111110'),
('f111110', 'f111110'),
('f16f16', 'f16f16'),
('f32', 'f32'),
('cov', 'cov'),
('u565u565', 'u565u565'),
('d24s8', 'd24s8'),
('s8d24', 's8d24'),
('f32_mask', 'f32_mask'),
('2f10f10f10', '2f10f10f10'),
('s8888ogl', 's8888ogl'),
('s1616ogl', 's1616ogl'),
('zero', 'zero'),
('one', 'one'),
])
enum_map(OM_SCHED.t, F_SCHED_CTRL, [
('none', 'none'),
('swap', 'swap'),
('wdf', 'wdf'),
])
encode_maps = {}
group_maps = {}
# Instruction encoding mapping.
class EncodeMap(object):
def __init__(self, name, cop_name, variants):
self.name = name
self.cop_name = cop_name
self.variants = variants
def encode_map(op, encodings):
assert op.bname not in encode_maps.keys(), f'Duplicate encode mapping for op "{op.name}".'
encode_variants = []
default_variant = encodings[0]
first_variant = encodings[1] if len(encodings) > 1 else None
for encoding_variant in encodings:
isa_op, isa_op_fields, *_ = encoding_variant
# Ensure we're speccing everything in the op fields.
assert set(isa_op.struct_fields.keys()) == set([field for field, val_spec in isa_op_fields]), f'Invalid field spec in isa op "{isa_op.bsname}" mapping for op "{op.name}".'
variant = isa_op.name.upper()
encode_variant = f'{isa_op.name}_encode({{0}}'
for isa_op_field, val_spec in isa_op_fields:
struct_field = isa_op.struct_fields[isa_op_field]
encode_variant += f', .{isa_op_field} = '
if isinstance(val_spec, bool):
encode_variant += str(val_spec).lower()
elif isinstance(val_spec, int):
encode_variant += str(val_spec)
elif isinstance(val_spec, str):
assert struct_field.type.base_type == BaseType.enum
enum = struct_field.type.enum
assert enum.parent is None
assert val_spec in enum.elems.keys(), f'Invalid enum element "{val_spec}" in field "{isa_op_field}" in isa op "{isa_op.bsname}" mapping for op "{op.name}".'
encode_variant += enum.elems[val_spec].cname
elif isinstance(val_spec, OpMod):
assert val_spec in op.op_mods, f'Op mod "{val_spec.t.tname}" was specified but not valid in isa op "{isa_op.bsname}" mapping for op "{op.name}".'
if struct_field.type.base_type == BaseType.enum:
enum_map_key = (val_spec.t, struct_field.type)
assert enum_map_key in enum_maps.keys(), f'Op mod enum "{val_spec.t.tname}" was specified but no mapping from enum "{struct_field.type.tname}" was found in mapping for op "{op.name}".'
enum_mapping = enum_maps[enum_map_key]
encode_variant += f'{enum_mapping.name}(pco_instr_get_mod({{1}}, {val_spec.cname}))'
else:
encode_variant += f'pco_instr_get_mod({{1}}, {val_spec.cname})'
elif isinstance(val_spec, tuple):
mod, origin = val_spec
if isinstance(mod, RefMod):
# This is different from op mods, in that enum maps are *optional*.
enum_map_key = (mod.t, struct_field.type)
if struct_field.type.base_type == BaseType.enum and enum_map_key in enum_maps.keys():
enum_mapping = enum_maps[enum_map_key]
encode_variant += f'{enum_mapping.name}({{1}}->{origin}.{mod.t.tname})'
else:
encode_variant += f'{{1}}->{origin}.{mod.t.tname}'
elif isinstance(mod, str):
encode_variant += f'{mod}({{1}}->{origin})'
else:
assert False
elif isinstance(val_spec, dict):
assert len(val_spec) == 1
_bin_op, mod_list = next(iter(val_spec.items()))
# No point doing a binop on a single item.
assert len(mod_list) > 1
# Only op mods supported for now.
assert all(isinstance(mod, OpMod) for mod in mod_list)
assert all(mod in op.op_mods for mod in mod_list)
# Make sure mods are all bools, can't do binops on other types.
assert all(mod.t.base_type == BaseType.bool for mod in mod_list)
if _bin_op == 'or':
bin_op = '||'
elif _bin_op == 'and':
bin_op = '&&'
else:
assert False
encode_variant += f' {bin_op} '.join([f'pco_instr_get_mod({{1}}, {mod.cname})' for mod in mod_list])
else:
assert False, f'Invalid value spec for field "{isa_op_field}" in isa op "{isa_op.bsname}" mapping for op "{op.name}".'
encode_variant += ')'
conds_variant = ''
if encoding_variant != default_variant:
conds_variant = 'if (' if encoding_variant == first_variant else 'else if ('
isa_op_conds = encoding_variant[2]
for i, isa_op_cond in enumerate(isa_op_conds):
if i > 0:
conds_variant += ' && '
if isinstance(isa_op_cond, tuple) and len(isa_op_cond) == 3:
mod, origin, cond = isa_op_cond
assert isinstance(mod, RefMod)
conds_variant += f'{{1}}->{origin}.{mod.t.tname} {cond}'
elif isinstance(isa_op_cond, tuple) and len(isa_op_cond) == 2:
mod, cond = isa_op_cond
assert isinstance(mod, OpMod)
assert mod in op.op_mods
conds_variant += f'pco_instr_get_mod({{1}}, {mod.cname}) {cond}'
else:
assert False
conds_variant += ')'
encode_variants.append((variant, encode_variant, conds_variant))
name = op.bname
cop_name = op.cname.upper()
encode_maps[name] = EncodeMap(name, cop_name, encode_variants)
# Instruction group mapping.
class GroupMap(object):
def __init__(self, name, cop_name, mapping_sets):
self.name = name
self.mapping_sets = mapping_sets
self.cop_name = cop_name
def group_map(op, hdr, enc_ops, srcs=[], iss=[], dests=[]):
assert op.bname not in group_maps.keys(), f'Duplicate group mapping for op "{op.name}".'
assert op.op_type != 'hw_direct', f'HW direct op "{op.name}" cannot have a group mapping.'
is_self = len(enc_ops) == 1 and enc_ops[0][1] == op
mapping_sets = []
hdr_variant, hdr_fields = hdr
# Ensure we're speccing everything in the header except length and da (need to be set later).
assert set(hdr_variant.struct_fields.keys()) == set([hdr_field for hdr_field, val_spec in hdr_fields] + ['length', 'da']), f'Invalid field spec in hdr mapping for op "{op.name}".'
# Add alutype setting after the check above, as it's actually a fixed value.
hdr_fields.append(('alutype', hdr_variant.bsname))
# Emit header mappings.
hdr_mappings = []
for hdr_field, val_spec in hdr_fields:
field = hdr_variant.bit_set.fields[hdr_field]
if isinstance(val_spec, bool):
value = str(val_spec).lower()
hdr_mappings.append(f'{{}}->hdr.{hdr_field} = {str(val_spec).lower()};')
elif isinstance(val_spec, int):
value = val_spec
hdr_mappings.append(f'{{}}->hdr.{hdr_field} = {val_spec};')
elif isinstance(val_spec, str):
assert field.field_type.base_type == BaseType.enum
enum = field.field_type.enum
assert enum.parent is None
assert val_spec in enum.elems.keys(), f'Invalid enum element "{val_spec}" in field "{hdr_field}" in hdr mapping for op "{op.name}".'
hdr_mappings.append(f'{{}}->hdr.{hdr_field} = {enum.elems[val_spec].cname};')
elif isinstance(val_spec, OpMod):
assert val_spec in op.op_mods, f'Op mod "{val_spec.t.tname}" was specified but not valid in hdr mapping for op "{op.name}".'
if field.field_type.base_type == BaseType.enum:
enum_map_key = (val_spec.t, field.field_type)
assert enum_map_key in enum_maps.keys(), f'Op mod enum "{val_spec.t.tname}" was specified but no mapping from enum "{field.field_type.tname}" was found in hdr mapping for op "{op.name}".'
enum_mapping = enum_maps[enum_map_key]
hdr_mappings.append(f'{{}}->hdr.{hdr_field} = {enum_mapping.name}(pco_instr_get_mod({{}}, {val_spec.cname}));')
else:
hdr_mappings.append(f'{{}}->hdr.{hdr_field} = pco_instr_get_mod({{}}, {val_spec.cname});')
if val_spec.t.unset and is_self:
reset_val = 0 if val_spec.t.nzdefault is None else val_spec.t.nzdefault
hdr_mappings.append(f'pco_instr_set_mod({{1}}, {val_spec.cname}, {reset_val});')
elif isinstance(val_spec, tuple):
mod, origin = val_spec
assert isinstance(mod, str) and isinstance(origin, str)
hdr_mappings.append(f'{{}}->hdr.{hdr_field} = {mod}({{}}->{origin});')
elif isinstance(val_spec, list):
assert field.field_type.base_type == BaseType.enum
enum = field.field_type.enum
assert enum.parent is None
assert enum.is_bitset
assert all(elem in enum.elems.keys() for elem in val_spec), f'Invalid enum element "{elem}" in field "{hdr_field}" in hdr mapping for op "{op.name}".'
val = ' | ' .join(enum.elems[elem].cname for elem in val_spec)
hdr_mappings.append(f'{{}}->hdr.{hdr_field} = {val};')
else:
assert False, f'Invalid value spec for field "{hdr_field}" in hdr mapping for op "{op.name}".'
assert bool(hdr_mappings)
mapping_sets.append(hdr_mappings);
# Emit instruction op mappings.
op_mappings = []
if is_self:
assert len(enc_ops[0]) == 2
_phase = enc_ops[0][0]
assert _phase in OP_PHASE.enum.elems.keys()
phase = OP_PHASE.enum.elems[_phase].cname
op_mappings.append(f'list_del(&{{1}}->link);')
op_mappings.append(f'{{}}->instrs[{phase}] = {{}};')
op_mappings.append(f'ralloc_steal(igrp, {{1}});')
else:
for _phase, enc_op, *_enc_spec in enc_ops:
assert _phase in OP_PHASE.enum.elems.keys()
phase = OP_PHASE.enum.elems[_phase].cname
assert enc_op.bname in encode_maps.keys(), f'Op "{enc_op.name}" used in group mapping for "{op.name}" has no encode mapping defined.'
enc_dests = _enc_spec[0] if len(_enc_spec) > 0 else []
enc_srcs = _enc_spec[1] if len(_enc_spec) > 1 else []
enc_op_mods = _enc_spec[2] if len(_enc_spec) > 2 else []
enc_mapping = f'{{0}}->instrs[{phase}] = {enc_op.bname}_({{1}}->parent_func'
for _ref in enc_dests + enc_srcs:
if _ref in IO.enum.elems.keys():
io = IO.enum.elems[_ref]
enc_mapping += f', pco_ref_io({io.cname})'
elif _ref == '_':
enc_mapping += f', pco_ref_null()'
elif len(_ref) == 2:
mod_func, ref = _ref
enc_mapping += f', {mod_func}({{1}}->{ref})'
else:
enc_mapping += f', {{1}}->{_ref}'
for op_mod, _val in enc_op_mods:
assert isinstance(op_mod, OpMod)
assert op_mod in enc_op.op_mods
if isinstance(_val, str):
assert op_mod.t.base_type == BaseType.enum
enum = op_mod.t.enum
assert enum.parent is None
assert _val in enum.elems.keys()
val = enum.elems[_val].cname
elif isinstance(_val, bool):
assert op_mod.t.base_type == BaseType.bool
val = str(_val).lower()
elif isinstance(_val, int):
assert op_mod.t.base_type == BaseType.uint
val = str(_val)
elif isinstance(_val, OpMod):
assert op_mod in op.op_mods
val = f'pco_instr_get_mod({{1}}, {_val.cname})'
else:
assert False
enc_mapping += f', .{op_mod.t.tname} = {val}'
enc_mapping += ');'
op_mappings.append(enc_mapping)
op_mappings.append(f'pco_instr_delete({{1}});')
assert bool(op_mappings)
mapping_sets.append(op_mappings);
# Emit source mappings.
src_mappings = []
for src, *_spec in srcs:
if len(_spec) == 2:
(_phase, val_spec), _io = _spec
assert _phase in OP_PHASE.enum.elems.keys()
phase = OP_PHASE.enum.elems[_phase].cname
if _io in IO.enum.elems.keys():
io = IO.enum.elems[_io].cname
else:
assert isinstance(_io, str)
io = _io
src_mappings.append(f'{{0}}->srcs.{src} = {{0}}->instrs[{phase}]->{val_spec};')
src_mappings.append(f'{{0}}->instrs[{phase}]->{val_spec} = pco_ref_io({io});')
src_mappings.append(f'pco_ref_xfer_mods(&{{0}}->instrs[{phase}]->{val_spec}, &{{0}}->srcs.{src}, true);')
elif len(_spec) == 1:
val = _spec[0]
assert isinstance(val, str)
src_mappings.append(f'{{0}}->srcs.{src} = {val};')
else:
assert False
if bool(src_mappings):
mapping_sets.append(src_mappings);
# Emit iss mappings.
iss_mappings = []
for iss, _io in iss:
if _io in IO.enum.elems.keys():
io = IO.enum.elems[_io].cname
else:
assert isinstance(_io, str)
io = _io
iss_mappings.append(f'{{}}->iss.{iss} = pco_ref_io({io});')
if bool(iss_mappings):
mapping_sets.append(iss_mappings);
# Emit destination mappings.
dest_mappings = []
for dest, (_phase, val_spec), _io in dests:
assert _phase in OP_PHASE.enum.elems.keys()
phase = OP_PHASE.enum.elems[_phase].cname
if _io in IO.enum.elems.keys():
io = IO.enum.elems[_io].cname
else:
assert isinstance(_io, str)
io = _io
dest_mappings.append(f'{{0}}->dests.{dest} = {{0}}->instrs[{phase}]->{val_spec};')
dest_mappings.append(f'{{0}}->instrs[{phase}]->{val_spec} = pco_ref_io({io});')
dest_mappings.append(f'pco_ref_xfer_mods(&{{0}}->instrs[{phase}]->{val_spec}, &{{0}}->dests.{dest}, true);')
if bool(dest_mappings):
mapping_sets.append(dest_mappings);
# Emit variant mappings.
variant_mappings = []
for _phase, enc_op, *_ in enc_ops:
assert _phase in OP_PHASE.enum.elems.keys()
phase = OP_PHASE.enum.elems[_phase].cname
variant_mappings.append(f'{{0}}->variant.instr[{phase}].{hdr_variant.bsname} = {enc_op.bname}_variant({{0}}->instrs[{phase}]);')
assert bool(variant_mappings)
mapping_sets.append(variant_mappings);
name = op.bname
cop_name = op.cname.upper()
group_maps[name] = GroupMap(name, cop_name, mapping_sets)
# Encode mappings.
encode_map(O_FADD,
encodings=[
(I_FADD, [
('sat', OM_SAT),
('s0neg', (RM_NEG, 'src[0]')),
('s0abs', (RM_ABS, 'src[0]')),
('s1abs', (RM_ABS, 'src[1]')),
('s0flr', (RM_FLR, 'src[0]'))
])
]
)
encode_map(O_FMUL,
encodings=[
(I_FMUL, [
('sat', OM_SAT),
('s0neg', (RM_NEG, 'src[0]')),
('s0abs', (RM_ABS, 'src[0]')),
('s1abs', (RM_ABS, 'src[1]')),
('s0flr', (RM_FLR, 'src[0]'))
])
]
)
encode_map(O_FMAD,
encodings=[
(I_FMAD_EXT, [
('s0neg', (RM_NEG, 'src[0]')),
('s0abs', (RM_ABS, 'src[0]')),
('s2neg', (RM_NEG, 'src[2]')),
('sat', OM_SAT),
('lp', OM_LP),
('s1abs', (RM_ABS, 'src[1]')),
('s1neg', (RM_NEG, 'src[1]')),
('s2flr', (RM_FLR, 'src[2]')),
('s2abs', (RM_ABS, 'src[2]'))
]),
(I_FMAD, [
('s0neg', (RM_NEG, 'src[0]')),
('s0abs', (RM_ABS, 'src[0]')),
('s2neg', (RM_NEG, 'src[2]')),
('sat', OM_SAT)
], [
(OM_LP, '== false'),
(RM_ABS, 'src[1]', '== false'),
(RM_NEG, 'src[1]', '== false'),
(RM_FLR, 'src[2]', '== false'),
(RM_ABS, 'src[2]', '== false')
])
]
)
encode_map(O_MBYP,
encodings=[
(I_SNGL_EXT, [
('sngl_op', 'byp'),
('s0neg', (RM_NEG, 'src[0]')),
('s0abs', (RM_ABS, 'src[0]'))
]),
(I_SNGL, [('sngl_op', 'byp')], [
(RM_NEG, 'src[0]', '== false'),
(RM_ABS, 'src[0]', '== false')
])
]
)
encode_map(O_PCK,
encodings=[
(I_PCK, [
('prog', False),
('rtz', OM_ROUNDZERO),
('scale', OM_SCALE),
('pck_format', OM_PCK_FMT)
])
]
)
encode_map(O_UVSW_WRITE,
encodings=[
(I_UVSW_WRITE_IMM, [
('dsel', 'w0'),
('imm_addr', ('pco_ref_get_imm', 'src[1]'))
])
]
)
encode_map(O_UVSW_EMIT, encodings=[(I_UVSW_EMIT, [])])
encode_map(O_UVSW_ENDTASK, encodings=[(I_UVSW_ENDTASK, [])])
encode_map(O_UVSW_EMIT_ENDTASK, encodings=[(I_UVSW_EMIT_ENDTASK, [])])
encode_map(O_UVSW_WRITE_EMIT_ENDTASK,
encodings=[
(I_UVSW_WRITE_EMIT_ENDTASK_IMM, [
('dsel', 'w0'),
('imm_addr', ('pco_ref_get_imm', 'src[1]'))
])
]
)
encode_map(O_FITR,
encodings=[
(I_FITR, [
('p', False),
('drc', ('pco_ref_get_drc', 'src[0]')),
('iter_mode', OM_ITR_MODE),
('sat', OM_SAT),
('count', ('pco_ref_get_imm', 'src[2]'))
])
]
)
encode_map(O_FITRP,
encodings=[
(I_FITR, [
('p', True),
('drc', ('pco_ref_get_drc', 'src[0]')),
('iter_mode', OM_ITR_MODE),
('sat', OM_SAT),
('count', ('pco_ref_get_imm', 'src[3]'))
])
]
)
encode_map(O_BBYP0BM_IMM32,
encodings=[
(I_PHASE0_IMM32, [
('count_src', 's2'),
('count_op', 'byp'),
('shift1_op', 'byp'),
('imm32', ('pco_ref_get_imm', 'src[1]'))
])
]
)
encode_map(O_WOP, encodings=[(I_WOP, [])])
encode_map(O_WDF, encodings=[(I_WDF, [])])
encode_map(O_NOP, encodings=[(I_NOP, [])])
encode_map(O_DITR,
encodings=[
(I_DITR, [
('dest', ('pco_ref_get_temp', 'dest[0]')),
('coff', ('pco_ref_get_coeff', 'src[1]')),
('p', 'none'),
('woff', 0),
('mode', OM_ITR_MODE),
('count', ('pco_ref_get_imm', 'src[2]')),
('coff_idx_ctrl', ('pco_ref_get_reg_idx_ctrl', 'src[1]')),
('woff_idx_ctrl', 'none'),
('f16', OM_F16),
('sched_ctrl', OM_SCHED),
('drc', ('pco_ref_get_drc', 'src[0]')),
('sat', OM_SAT)
])
]
)
encode_map(O_DITRP,
encodings=[
(I_DITR, [
('dest', ('pco_ref_get_temp', 'dest[0]')),
('coff', ('pco_ref_get_coeff', 'src[1]')),
('p', 'iter_mul'),
('woff', ('pco_ref_get_coeff', 'src[2]')),
('mode', OM_ITR_MODE),
('count', ('pco_ref_get_imm', 'src[3]')),
('coff_idx_ctrl', ('pco_ref_get_reg_idx_ctrl', 'src[1]')),
('woff_idx_ctrl', ('pco_ref_get_reg_idx_ctrl', 'src[2]')),
('f16', OM_F16),
('sched_ctrl', OM_SCHED),
('drc', ('pco_ref_get_drc', 'src[0]')),
('sat', OM_SAT)
])
]
)
# Group mappings.
group_map(O_FADD,
hdr=(I_IGRP_HDR_MAIN, [
('oporg', 'p0'),
('olchk', OM_OLCHK),
('w1p', False),
('w0p', True),
('cc', OM_EXEC_CND),
('end', OM_END),
('atom', OM_ATOM),
('rpt', OM_RPT)
]),
enc_ops=[('0', O_FADD)],
srcs=[
('s[0]', ('0', 'src[0]'), 's0'),
('s[1]', ('0', 'src[1]'), 's1')
],
iss=[('is[4]', 'ft0')],
dests=[('w[0]', ('0', 'dest[0]'), 'ft0')]
)
group_map(O_FMUL,
hdr=(I_IGRP_HDR_MAIN, [
('oporg', 'p0'),
('olchk', OM_OLCHK),
('w1p', False),
('w0p', True),
('cc', OM_EXEC_CND),
('end', OM_END),
('atom', OM_ATOM),
('rpt', OM_RPT)
]),
enc_ops=[('0', O_FMUL)],
srcs=[
('s[0]', ('0', 'src[0]'), 's0'),
('s[1]', ('0', 'src[1]'), 's1')
],
iss=[('is[4]', 'ft0')],
dests=[('w[0]', ('0', 'dest[0]'), 'ft0')]
)
group_map(O_FMAD,
hdr=(I_IGRP_HDR_MAIN, [
('oporg', 'p0'),
('olchk', OM_OLCHK),
('w1p', False),
('w0p', True),
('cc', OM_EXEC_CND),
('end', OM_END),
('atom', OM_ATOM),
('rpt', OM_RPT)
]),
enc_ops=[('0', O_FMAD)],
srcs=[
('s[0]', ('0', 'src[0]'), 's0'),
('s[1]', ('0', 'src[1]'), 's1'),
('s[2]', ('0', 'src[2]'), 's2')
],
iss=[('is[4]', 'ft0')],
dests=[('w[0]', ('0', 'dest[0]'), 'ft0')]
)
group_map(O_MBYP,
hdr=(I_IGRP_HDR_MAIN, [
('oporg', 'p0'),
('olchk', OM_OLCHK),
('w1p', False),
('w0p', True),
('cc', OM_EXEC_CND),
('end', OM_END),
('atom', OM_ATOM),
('rpt', OM_RPT)
]),
enc_ops=[('0', O_MBYP)],
srcs=[('s[0]', ('0', 'src[0]'), 's0')],
iss=[('is[4]', 'ft0')],
dests=[('w[0]', ('0', 'dest[0]'), 'ft0')]
)
group_map(O_PCK,
hdr=(I_IGRP_HDR_MAIN, [
('oporg', 'p2'),
('olchk', OM_OLCHK),
('w1p', False),
('w0p', True),
('cc', OM_EXEC_CND),
('end', OM_END),
('atom', OM_ATOM),
('rpt', OM_RPT)
]),
enc_ops=[('2_pck', O_PCK)],
srcs=[('s[0]', ('2_pck', 'src[0]'), 'is3')],
iss=[
('is[0]', 's0'),
('is[3]', 'fte'),
('is[4]', 'ft2')
],
dests=[('w[0]', ('2_pck', 'dest[0]'), 'ft2')]
)
group_map(O_UVSW_WRITE,
hdr=(I_IGRP_HDR_MAIN, [
('oporg', 'be'),
('olchk', False),
('w1p', False),
('w0p', False),
('cc', OM_EXEC_CND),
('end', False),
('atom', False),
('rpt', OM_RPT)
]),
enc_ops=[('backend', O_UVSW_WRITE)],
srcs=[('s[0]', ('backend', 'src[0]'), 'w0')],
iss=[
('is[0]', 's0'),
('is[4]', 'fte')
]
)
group_map(O_UVSW_EMIT,
hdr=(I_IGRP_HDR_MAIN, [
('oporg', 'be'),
('olchk', False),
('w1p', False),
('w0p', False),
('cc', OM_EXEC_CND),
('end', False),
('atom', False),
('rpt', 1)
]),
enc_ops=[('backend', O_UVSW_EMIT)]
)
group_map(O_UVSW_ENDTASK,
hdr=(I_IGRP_HDR_MAIN, [
('oporg', 'be'),
('olchk', False),
('w1p', False),
('w0p', False),
('cc', 'e1_zx'),
('end', OM_END),
('atom', False),
('rpt', 1)
]),
enc_ops=[('backend', O_UVSW_ENDTASK)]
)
group_map(O_UVSW_EMIT_ENDTASK,
hdr=(I_IGRP_HDR_MAIN, [
('oporg', 'be'),
('olchk', False),
('w1p', False),
('w0p', False),
('cc', 'e1_zx'),
('end', OM_END),
('atom', False),
('rpt', 1)
]),
enc_ops=[('backend', O_UVSW_EMIT_ENDTASK)]
)
group_map(O_UVSW_WRITE_EMIT_ENDTASK,
hdr=(I_IGRP_HDR_MAIN, [
('oporg', 'be'),
('olchk', False),
('w1p', False),
('w0p', False),
('cc', 'e1_zx'),
('end', OM_END),
('atom', False),
('rpt', 1)
]),
enc_ops=[('backend', O_UVSW_WRITE_EMIT_ENDTASK)],
srcs=[('s[0]', ('backend', 'src[0]'), 'w0')],
iss=[
('is[0]', 's0'),
('is[4]', 'fte')
]
)
group_map(O_FITR,
hdr=(I_IGRP_HDR_MAIN, [
('oporg', 'be'),
('olchk', OM_OLCHK),
('w1p', False),
('w0p', False),
('cc', OM_EXEC_CND),
('end', OM_END),
('atom', OM_ATOM),
('rpt', OM_RPT)
]),
enc_ops=[('backend', O_FITR)],
srcs=[
('s[0]', ('backend', 'src[1]'), 's0'),
('s[3]', ('backend', 'dest[0]'), 's3')
]
)
group_map(O_FITRP,
hdr=(I_IGRP_HDR_MAIN, [
('oporg', 'be'),
('olchk', OM_OLCHK),
('w1p', False),
('w0p', False),
('cc', OM_EXEC_CND),
('end', OM_END),
('atom', OM_ATOM),
('rpt', OM_RPT)
]),
enc_ops=[('backend', O_FITRP)],
srcs=[
('s[0]', ('backend', 'src[1]'), 's0'),
('s[2]', ('backend', 'src[2]'), 's2'),
('s[3]', ('backend', 'dest[0]'), 's3')
]
)
group_map(O_MOVI32,
hdr=(I_IGRP_HDR_BITWISE, [
('opcnt', 'p0'),
('olchk', OM_OLCHK),
('w1p', False),
('w0p', True),
('cc', OM_EXEC_CND),
('end', OM_END),
('atom', OM_ATOM),
('rpt', OM_RPT)
]),
enc_ops=[('0', O_BBYP0BM_IMM32, ['ft0', 'dest[0]'], ['s0', 'src[0]'])],
dests=[('w[0]', ('0', 'dest[1]'), 'ft1')]
)
group_map(O_WOP,
hdr=(I_IGRP_HDR_CONTROL, [
('olchk', False),
('w1p', False),
('w0p', False),
('cc', 'e1_zx'),
('miscctl', 0),
('ctrlop', 'wop')
]),
enc_ops=[('ctrl', O_WOP),]
)
group_map(O_WDF,
hdr=(I_IGRP_HDR_CONTROL, [
('olchk', False),
('w1p', False),
('w0p', False),
('cc', 'e1_zx'),
('miscctl', ('pco_ref_get_drc', 'src[0]')),
('ctrlop', 'wdf')
]),
enc_ops=[('ctrl', O_WDF)]
)
group_map(O_NOP,
hdr=(I_IGRP_HDR_CONTROL, [
('olchk', False),
('w1p', False),
('w0p', False),
('cc', OM_EXEC_CND),
('miscctl', OM_END),
('ctrlop', 'nop')
]),
enc_ops=[('ctrl', O_NOP)]
)
group_map(O_DITR,
hdr=(I_IGRP_HDR_CONTROL, [
('olchk', False),
('w1p', False),
('w0p', False),
('cc', OM_EXEC_CND),
('miscctl', False),
('ctrlop', 'ditr')
]),
enc_ops=[('ctrl', O_DITR)]
)
group_map(O_DITRP,
hdr=(I_IGRP_HDR_CONTROL, [
('olchk', False),
('w1p', False),
('w0p', False),
('cc', OM_EXEC_CND),
('miscctl', False),
('ctrlop', 'ditr')
]),
enc_ops=[('ctrl', O_DITRP)]
)