# ================================================
# 64-bit architecture
# ================================================
# double word integers
# ================================================

# ------------------------+----------------------+
#  signed 2's complement  | decimal from signed  |
#                         |  2's complement      |
# ------------------------+----------------------+
#        hex              |       decimal        |
# ------------------------+----------------------+
# 0xfffffffffffffffe      | -2                   |
# 0x00ff00ff00ff00ff      |  71777214294589695   |
# 0x7000000000000000      |  8070450532247928832 |
# 0xfe01fe01fe01fe02      | -143554428589179390  |
# 0xf806fa04fc02fe01      | -574497003128291839  |
# ------------------------+----------------------+

.data

aa: .dword 0xfffffffffffffffe
bb: .dword 0x00ff00ff00ff00ff
cc: .dword 0x7000000000000000

.text
.globl main
main:

    # ---- load aa into register t1

    la   t0, aa
    ld   t1, 0(t0) 

    # ---- load bb into register t2

    la   t0, bb
    ld   t2, 0(t0)

    # ---- load cc into register a5

    la   t0, cc
    ld   a5, 0(t0)

    # ---- add to dword integers

    add t3, t2, t1

    # ---- multiply to dword integers

    mul t4, t2, t1       # aa*bb

    mul t5, t2, t2       # bb*bb (overflow)

    mul t6, a5, a5       # cc*c (overflow)

    # ---- Exit program

    li   a7, 93
    li   a0, 1
    ecall
