# Linux Kernel Module Cheat

##### 24.22.7.2. gem5 DerivO3CPU default functional units

On gem5 3ca404da175a66e0b958165ad75eb5f54cb5e772, after running:

    ./run   \
      --arch aarch64 \
      --emulator gem5 \
      --userland userland/arch/aarch64/freestanding/linux/hello.S \
      --trace-insts-stdout \
      -- \
      --cpu-type Derivo3CPU \
      --caches

we see:

    [system.cpu]
    type=DerivO3CPU
    children=branchPred dcache dtb fuPool icache interrupts isa itb power_state tracer workload

and following `fuPool`:

    [system.cpu.fuPool]
    type=FUPool
    children=FUList0 FUList1 FUList2 FUList3 FUList4 FUList5 FUList6 FUList7 FUList8 FUList9

so for example `FUList0` is:

    [system.cpu.fuPool.FUList0]
    type=FUDesc
    children=opList
    count=6
    eventq_index=0
    opList=system.cpu.fuPool.FUList0.opList

    [system.cpu.fuPool.FUList0.opList]
    type=OpDesc
    eventq_index=0
    opClass=IntAlu
    opLat=1
    pipelined=true

and `FUList1`:

    [system.cpu.fuPool.FUList1.opList0]
    type=OpDesc
    eventq_index=0
    opClass=IntMult
    opLat=3
    pipelined=true

    [system.cpu.fuPool.FUList1.opList1]
    type=OpDesc
    eventq_index=0
    opClass=IntDiv
    opLat=20
    pipelined=false

So summarizing all units we have:

- 0, 1: `IntAlu` with `opLat=3`

- 2: `IntMult` with `opLat=3` and `IntDiv` with `opLat=20`

- 3: `FloatAdd`, `FloatCmp`, `FloatCvt` with `opLat=2`

- TODO lazy to finish the list :-)