diff options
Diffstat (limited to 'apps/raytracing/2.mu')
-rw-r--r-- | apps/raytracing/2.mu | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/apps/raytracing/2.mu b/apps/raytracing/2.mu deleted file mode 100644 index e23ce3b4..00000000 --- a/apps/raytracing/2.mu +++ /dev/null @@ -1,86 +0,0 @@ -# Listing 7 of https://raytracing.github.io/books/RayTracingInOneWeekend.html -# -# To run (on Linux): -# $ git clone https://github.com/akkartik/mu -# $ cd mu -# $ ./translate_mu apps/raytracing/2.mu -# $ ./a.elf > 2.ppm - -fn main -> _/ebx: int { - print-string 0, "P3\n256 256\n255\n" - var _four/edx: int <- copy 4 - var four/xmm1: float <- convert _four - var one-fourth/xmm1: float <- reciprocal four - var max/edx: int <- copy 0xff - var image-size/xmm2: float <- convert max - var j/ecx: int <- copy 0xff - { - compare j, 0 - break-if-< - var i/eax: int <- copy 0 - { - compare i, 0xff - break-if-> - var c: rgb - # compute r - var tmp/xmm0: float <- convert i - tmp <- divide image-size - var r-addr/edx: (addr float) <- get c, r - copy-to *r-addr, tmp -#? var tmp2/ebx: int <- reinterpret *r-addr -#? print-int32-hex 0, tmp2 -#? print-string 0, "\n" - # compute g - tmp <- convert j - tmp <- divide image-size - var g-addr/edx: (addr float) <- get c, g - copy-to *g-addr, tmp - # compute b - var b-addr/edx: (addr float) <- get c, b - copy-to *b-addr, one-fourth - # emit - var c-addr/edx: (addr rgb) <- address c - print-rgb 0, c-addr - i <- increment - loop - } - j <- decrement - loop - } - return 0 -} - -type rgb { - # components normalized to within [0.0, 1.0] - r: float - g: float - b: float -} - -# print translating to [0, 256) -fn print-rgb screen: (addr screen), _c: (addr rgb) { - var c/esi: (addr rgb) <- copy _c - var n/ecx: int <- copy 0xff # turns out 255 works just as well as 255.999, which is lucky because we don't have floating-point literals - var xn/xmm1: float <- convert n - # print 255 * c->r - var result/xmm0: float <- copy xn - var src-addr/eax: (addr float) <- get c, r - result <- multiply *src-addr - var result-int/edx: int <- convert result - print-int32-decimal screen, result-int - print-string screen, " " - # print 255 * c->g - src-addr <- get c, g - result <- copy xn - result <- multiply *src-addr - result-int <- convert result - print-int32-decimal screen, result-int - print-string screen, " " - # print 255 * c->b - src-addr <- get c, b - result <- copy xn - result <- multiply *src-addr - result-int <- convert result - print-int32-decimal screen, result-int - print-string screen, "\n" -} |