; ModuleID = 'lank-vm.cpp' target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:64:128-a0:0:64-n32-S64" target triple = "armv6-unknown-linux-gnueabihf" %struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i32, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i32, i32, [40 x i8] } %struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 } @.str = private unnamed_addr constant [43 x i8] c"memory[0x20+1+0] <= (uint32_t) 0xFFFFFFFFU\00", align 1 @.str1 = private unnamed_addr constant [12 x i8] c"lank-vm.cpp\00", align 1 @__PRETTY_FUNCTION__.run = private unnamed_addr constant [53 x i8] c"void run(const size_t, const uint32_t *, uint32_t *)\00", align 1 @.str2 = private unnamed_addr constant [16 x i8] c"PC %X INSTR %X\0A\00", align 1 @.str3 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1 @_ZZ4mainE4prog = private unnamed_addr constant [10 x i32] [i32 294, i32 -1688681770, i32 1010303076, i32 -1688681770, i32 976748744, i32 875348282, i32 -1688681770, i32 1496842424, i32 875350100, i32 875340433], align 4 @.str4 = private unnamed_addr constant [8 x i8] c"test.lc\00", align 1 @.str5 = private unnamed_addr constant [2 x i8] c"r\00", align 1 @.str6 = private unnamed_addr constant [8 x i8] c"test.lt\00", align 1 @.str7 = private unnamed_addr constant [2 x i8] c"w\00", align 1 @.str8 = private unnamed_addr constant [21 x i8] c"sourceCode != __null\00", align 1 @__PRETTY_FUNCTION__.main = private unnamed_addr constant [11 x i8] c"int main()\00", align 1 @.str9 = private unnamed_addr constant [20 x i8] c"tokenFile != __null\00", align 1 @.str10 = private unnamed_addr constant [25 x i8] c"sourceSentenceLength > 0\00", align 1 @.str11 = private unnamed_addr constant [44 x i8] c"(size_t) returnCode == outputSentenceLength\00", align 1 @.str12 = private unnamed_addr constant [16 x i8] c"returnCode == 0\00", align 1 @.str13 = private unnamed_addr constant [15 x i8] c"progLength > 0\00", align 1 @_ZZ8tokenizejPcPjPtE6glyphs = private unnamed_addr constant [6 x i8] c"XXXXX\00", align 1 @__PRETTY_FUNCTION__._Z8tokenizejPcPjPt = private unnamed_addr constant [58 x i8] c"void tokenize(const size_t, char *, size_t *, uint16_t *)\00", align 1 @.str14 = private unnamed_addr constant [25 x i8] c"sourceSentence != __null\00", align 1 @.str15 = private unnamed_addr constant [30 x i8] c"tokenSentenceLength != __null\00", align 1 @.str16 = private unnamed_addr constant [24 x i8] c"tokenSentence != __null\00", align 1 @.str17 = private unnamed_addr constant [18 x i8] c"prevToken 0x%X \0A \00", align 1 @.str18 = private unnamed_addr constant [15 x i8] c"n0 glyph '%c' \00", align 1 @.str19 = private unnamed_addr constant [11 x i8] c"nibble %X \00", align 1 @.str20 = private unnamed_addr constant [14 x i8] c"at %d in %s\0A\00", align 1 @.str21 = private unnamed_addr constant [38 x i8] c"tokenization parse error, vowel start\00", align 1 @.str22 = private unnamed_addr constant [18 x i8] c"nibbles[0] <= 0xC\00", align 1 @.str23 = private unnamed_addr constant [41 x i8] c"tempSourceIndex+3 < sourceSentenceLength\00", align 1 @.str24 = private unnamed_addr constant [18 x i8] c"%c at %d from %s\0A\00", align 1 @.str25 = private unnamed_addr constant [26 x i8] c"tokenize unexpected space\00", align 1 @.str26 = private unnamed_addr constant [20 x i8] c"!isSpace(glyphs[1])\00", align 1 @.str27 = private unnamed_addr constant [20 x i8] c"!isSpace(glyphs[3])\00", align 1 @.str28 = private unnamed_addr constant [19 x i8] c"tokenIndex <= 60/2\00", align 1 @.str29 = private unnamed_addr constant [18 x i8] c"memory[0x20] == 1\00", align 1 @__PRETTY_FUNCTION__._Z4evalPjPb = private unnamed_addr constant [30 x i8] c"void eval(uint32_t *, bool *)\00", align 1 @.str30 = private unnamed_addr constant [13 x i8] c"command != 0\00", align 1 @.str31 = private unnamed_addr constant [6 x i8] c"exit\0A\00", align 1 @.str32 = private unnamed_addr constant [37 x i8] c"memory[0x10+0x5] == memory[0x10+0xA]\00", align 1 @.str33 = private unnamed_addr constant [7 x i8] c"added\0A\00", align 1 @.str34 = private unnamed_addr constant [37 x i8] c"memory[0x10+0x6] == memory[0x10+0xA]\00", align 1 @.str35 = private unnamed_addr constant [12 x i8] c"subtracted\0A\00", align 1 @.str36 = private unnamed_addr constant [22 x i8] c"eval: unknown command\00", align 1 @.str37 = private unnamed_addr constant [17 x i8] c"memory != __null\00", align 1 @__PRETTY_FUNCTION__._Z9printRegsPKj = private unnamed_addr constant [33 x i8] c"void printRegs(const uint32_t *)\00", align 1 @.str38 = private unnamed_addr constant [13 x i8] c"registers: \0A\00", align 1 @.str39 = private unnamed_addr constant [19 x i8] c" Value\09Type \0A\00", align 1 @.str40 = private unnamed_addr constant [18 x i8] c" IMM %d\090x%X,\0A\00", align 1 @.str41 = private unnamed_addr constant [18 x i8] c" HEY %d\090x%X,\0A\00", align 1 @.str42 = private unnamed_addr constant [18 x i8] c" ABOUT %d\090x%X,\0A\00", align 1 @.str43 = private unnamed_addr constant [18 x i8] c" SU %d\090x%X,\0A\00", align 1 @.str44 = private unnamed_addr constant [18 x i8] c" OF %d\090x%X,\0A\00", align 1 @.str45 = private unnamed_addr constant [18 x i8] c" TO %d\090x%X,\0A\00", align 1 @.str46 = private unnamed_addr constant [18 x i8] c" FROM %d\090x%X,\0A\00", align 1 @.str47 = private unnamed_addr constant [18 x i8] c" BY %d\090x%X,\0A\00", align 1 @.str48 = private unnamed_addr constant [18 x i8] c" BE %d\090x%X,\0A\00", align 1 @.str49 = private unnamed_addr constant [18 x i8] c" OB %d\090x%X,\0A\00", align 1 @.str50 = private unnamed_addr constant [18 x i8] c" DATAP %d\090x%X,\0A\00", align 1 @.str51 = private unnamed_addr constant [18 x i8] c" STACKP %d\090x%X,\0A\00", align 1 @.str52 = private unnamed_addr constant [18 x i8] c" PC %d\090x%X,\0A\00", align 1 @.str53 = private unnamed_addr constant [18 x i8] c"printedLength > 0\00", align 1 @__PRETTY_FUNCTION__._Z21memPhraseToLankGlyphsPKjjPc = private unnamed_addr constant [67 x i8] c"void memPhraseToLankGlyphs(const uint32_t *, const size_t, char *)\00", align 1 @.str54 = private unnamed_addr constant [17 x i8] c"glyphs != __null\00", align 1 @.str55 = private unnamed_addr constant [17 x i8] c"phraseLength > 0\00", align 1 @.str56 = private unnamed_addr constant [40 x i8] c"phraseLength <= (size_t) (uint32_t) 0xF\00", align 1 @.str57 = private unnamed_addr constant [17 x i8] c"memory[0x20] > 1\00", align 1 @__PRETTY_FUNCTION__._Z6decodePj = private unnamed_addr constant [24 x i8] c"void decode(uint32_t *)\00", align 1 @.str58 = private unnamed_addr constant [24 x i8] c"immediateLengthWord > 0\00", align 1 @.str59 = private unnamed_addr constant [30 x i8] c"0xFFFF >= immediateLengthWord\00", align 1 @.str60 = private unnamed_addr constant [41 x i8] c"immediateValue <= (uint32_t) 0xFFFFFFFFU\00", align 1 @.str61 = private unnamed_addr constant [36 x i8] c"decode: unknown immediateLengthWord\00", align 1 @.str62 = private unnamed_addr constant [33 x i8] c"phraseDecode: unknown phraseWord\00", align 1 @__PRETTY_FUNCTION__._Z5fetchPKjjPj = private unnamed_addr constant [55 x i8] c"void fetch(const uint32_t *, const size_t, uint32_t *)\00", align 1 @.str63 = private unnamed_addr constant [27 x i8] c"PC exceeded end of program\00", align 1 @.str64 = private unnamed_addr constant [25 x i8] c"memory[0xF] < progLength\00", align 1 @.str65 = private unnamed_addr constant [28 x i8] c"currentBit < (uint32_t) 0xF\00", align 1 @.str66 = private unnamed_addr constant [32 x i8] c"batchIndex < (uint32_t) 0xFFFFU\00", align 1 @.str67 = private unnamed_addr constant [28 x i8] c"maxLength <= (uint32_t) 0xF\00", align 1 @.str68 = private unnamed_addr constant [32 x i8] c"memory[0x20] <= remainingLength\00", align 1 @.str69 = private unnamed_addr constant [26 x i8] c"memory[0x20] <= maxLength\00", align 1 @.str70 = private unnamed_addr constant [37 x i8] c"phraseWord <= (uint32_t) 0xFFFFFFFFU\00", align 1 @.str71 = private unnamed_addr constant [32 x i8] c"number < (uint32_t) 0xFFFFFFFFU\00", align 1 @__PRETTY_FUNCTION__._Z16amountOfSameBitsjj = private unnamed_addr constant [58 x i8] c"uint32_t amountOfSameBits(const uint32_t, const uint32_t)\00", align 1 @.str72 = private unnamed_addr constant [36 x i8] c"maxLength <= (size_t) sizeof(int)*8\00", align 1 @.str73 = private unnamed_addr constant [25 x i8] c"firstBit <= (uint32_t) 1\00", align 1 @.str74 = private unnamed_addr constant [20 x i8] c"length <= maxLength\00", align 1 define void @run(i32 %progLength, i32* %prog, i32* %memory) #0 { %1 = alloca i32, align 4 %2 = alloca i32*, align 4 %3 = alloca i32*, align 4 %i = alloca i32, align 4 %running = alloca i8, align 1 %glyphsLength = alloca i32, align 4 %glyphs = alloca [120 x i8], align 1 store i32 %progLength, i32* %1, align 4 store i32* %prog, i32** %2, align 4 store i32* %memory, i32** %3, align 4 store i32 0, i32* %i, align 4 store i8 1, i8* %running, align 1 store i32 0, i32* %glyphsLength, align 4 %4 = bitcast [120 x i8]* %glyphs to i8* call void @llvm.memset.p0i8.i32(i8* %4, i8 0, i32 120, i32 1, i1 false) store i32 0, i32* %i, align 4 br label %5 ;