about summary refs log tree commit diff stats
path: root/baremetal/313index-bounds-check.subx
diff options
context:
space:
mode:
Diffstat (limited to 'baremetal/313index-bounds-check.subx')
-rw-r--r--baremetal/313index-bounds-check.subx60
1 files changed, 0 insertions, 60 deletions
diff --git a/baremetal/313index-bounds-check.subx b/baremetal/313index-bounds-check.subx
deleted file mode 100644
index c9d01ee2..00000000
--- a/baremetal/313index-bounds-check.subx
+++ /dev/null
@@ -1,60 +0,0 @@
-# Helper to check an array's bounds, and to abort if they're violated.
-# Really only intended to be called from code generated by mu.subx.
-
-== code
-
-__check-mu-array-bounds:  # index: int, elem-size: int, arr-size: int, function-name: (addr array byte), array-name: (addr array byte)
-    # . prologue
-    55/push-ebp
-    89/<- %ebp 4/r32/esp
-    # . save registers
-    50/push-eax
-    51/push-ecx
-    52/push-edx
-    # . not bothering saving ebx; it's only clobbered if we're going to abort
-    # ecx = arr-size
-    8b/-> *(ebp+0x10) 1/r32/ecx
-    # var overflow/edx: int = 0
-    ba/copy-to-edx 0/imm32
-    # var offset/eax: int = index * elem-size
-    8b/-> *(ebp+8) 0/r32/eax
-    f7 4/subop/multiply-eax-with *(ebp+0xc)
-    # check for overflow
-    81 7/subop/compare %edx 0/imm32
-    0f 85/jump-if-!= __check-mu-array-bounds:overflow/disp32
-    # check bounds
-    39/compare %eax 1/r32/ecx
-    0f 82/jump-if-unsigned< $__check-mu-array-bounds:end/disp32  # negative index should always abort
-    # abort if necessary
-    (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 "fn " 3 0)  # 3=cyan
-    (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 *(ebp+0x14) 3 0)  # 3=cyan
-    (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 ": offset " 3 0)  # 3=cyan
-    (draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0 %eax 3 0)  # 3=cyan
-    (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 " is too large for array '" 3 0)  # 3=cyan
-    (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 *(ebp+0x18) 3 0)  # 3=cyan
-    (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 "'" 3 0)  # 3=cyan
-    {
-      eb/jump loop/disp8
-    }
-    # never gets here
-$__check-mu-array-bounds:end:
-    # . restore registers
-    5a/pop-to-edx
-    59/pop-to-ecx
-    58/pop-to-eax
-    # . epilogue
-    89/<- %esp 5/r32/ebp
-    5d/pop-to-ebp
-    c3/return
-
-__check-mu-array-bounds:overflow:
-    (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 "fn " 3 0)  # 3=cyan
-    (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 *(ebp+0x14) 3 0)  # 3=cyan
-    (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 ": offset to array '" 3 0)  # 3=cyan
-    (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 "offset to array overflowed 32 bits" 3 0)  # 3=cyan
-    (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 *(ebp+0x18) 3 0)  # 3=cyan
-    (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 "' overflowed 32 bits" 3 0)  # 3=cyan
-    {
-      eb/jump loop/disp8
-    }
-    # never gets here