anchor.diff:  
                 // calculate a pointer to the element to assign to elem
                 let! curElemReg = freshReg
  -              let! (curElemName, curElemType, curElemCode) = newRegister curElemReg (sprintf "%s*" (genType elemType)) (sprintf "getelementptr %s %s, i32 0, %s %s" listType listName loadedCounterType loadedCounterName)
  +              let! (curElemName, curElemType, curElemCode) = newRegister curElemReg (sprintf "%s*" (genType elemType)) (sprintf "getelementptr %s %s, i64 0, %s %s" listType listName loadedCounterType loadedCounterName)
   
                 // load the pointer to the value
                 let! loadedElemReg = freshReg
  
positive.code:                     sprintf "or %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
                    | And, "i1" -> 
                      sprintf "and %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
                    | GreaterThan, "i1" | GreaterThanOrEq, "i1" | LessThan, "i1" | LessThanOrEq, "i1" | Equals, "i1" | NotEquals, "i1" -> 
                      (icmpString op sLhsType sLhsName sRhsName, sLhsType)
                    | _,_ as err -> failwith (sprintf "%A not matched" err)
                let! (resName, resType, resCode) = newRegister tempReg targetType code
                let fullString = sprintf "%s\n%s\n%s\n" lhsCode rhsCode resCode
  
negative.code:                 let! (strName, strType, strCode) as str = declareStringConstant stringToPrint
                  let! regName = freshReg
                  let! (loadedStringName, loadedStringType, loadCode) = genLoadString regName str
                  let putsCode = sprintf "call i32 @puts(%s %s)" loadedStringType loadedStringName
                  let fullString = sprintf "%s\n%s" loadCode putsCode
                  return ("","", fullString)
  