structures:
  main:
    bits: 32
    ranges:
      31-20:
        name: src
        depends-on: 5
        values:
          0:
            description:
            structure: srcImmediate
          1:
            description:
            structure: srcRegister
      19-15:
        name: rs1
      14-12:
        name: funct3
        description: function modifier
        values:
          000: byte
          001: half-word
          "010": word
          100: upper byte (load only)
          101: upper half (load only)
      11-7:
        name: dst
        depends-on: 5
        values:
          0:
            description:
            structure: dstRegister
          1:
            description:
            structure: dstImmediate
      6:
        name: 0
      5:
        name: I
      4:
        name: 0
      3:
        name: 0
      2:
        name: 0
      1:
        name: 1
      0:
        name: 1

  srcImmediate:
    bits: 12
    ranges:
      11-0:
        name: src
        description: source memory address
  srcRegister:
    bits: 12
    ranges:
      11-5:
        name: dstU
        description: destination address upper bits
      4-0:
        name: rs2
        description: source register

  dstImmediate:
    bits: 5
    ranges:
      4-0:
        name: destL
        description: destination address lower bits
  dstRegister:
    bits: 5
    ranges:
      4-0:
        name: rd
        description: destination register