Sfoglia il codice sorgente

some minor i8/16 renames, use 16 bit get/set in Bytes

Nicolas Cannasse 9 anni fa
parent
commit
844460fda8

+ 25 - 13
src/generators/genhl.ml

@@ -672,9 +672,9 @@ let set_default ctx r =
 let read_mem ctx rdst bytes index t =
 let read_mem ctx rdst bytes index t =
 	match t with
 	match t with
 	| HUI8 ->
 	| HUI8 ->
-		op ctx (OGetI8 (rdst,bytes,index))
+		op ctx (OGetUI8 (rdst,bytes,index))
 	| HUI16 ->
 	| HUI16 ->
-		op ctx (OGetI16 (rdst,bytes,index))
+		op ctx (OGetUI16 (rdst,bytes,index))
 	| HI32 ->
 	| HI32 ->
 		op ctx (OGetI32 (rdst,bytes,index))
 		op ctx (OGetI32 (rdst,bytes,index))
 	| HF32 ->
 	| HF32 ->
@@ -687,9 +687,9 @@ let read_mem ctx rdst bytes index t =
 let write_mem ctx bytes index t r=
 let write_mem ctx bytes index t r=
 	match t with
 	match t with
 	| HUI8 ->
 	| HUI8 ->
-		op ctx (OSetI8 (bytes,index,r))
+		op ctx (OSetUI8 (bytes,index,r))
 	| HUI16 ->
 	| HUI16 ->
-		op ctx (OSetI16 (bytes,index,r))
+		op ctx (OSetUI16 (bytes,index,r))
 	| HI32 ->
 	| HI32 ->
 		op ctx (OSetI32 (bytes,index,r))
 		op ctx (OSetI32 (bytes,index,r))
 	| HF32 ->
 	| HF32 ->
@@ -1199,11 +1199,17 @@ and eval_expr ctx e =
 			let tmp = alloc_tmp ctx HI32 in
 			let tmp = alloc_tmp ctx HI32 in
 			op ctx (OToInt (tmp, eval_expr ctx e));
 			op ctx (OToInt (tmp, eval_expr ctx e));
 			tmp
 			tmp
-		| "$bseti8", [b;pos;v] ->
+		| "$bsetui8", [b;pos;v] ->
 			let b = eval_to ctx b HBytes in
 			let b = eval_to ctx b HBytes in
 			let pos = eval_to ctx pos HI32 in
 			let pos = eval_to ctx pos HI32 in
 			let r = eval_to ctx v HI32 in
 			let r = eval_to ctx v HI32 in
-			op ctx (OSetI8 (b, pos, r));
+			op ctx (OSetUI8 (b, pos, r));
+			r
+		| "$bsetui16", [b;pos;v] ->
+			let b = eval_to ctx b HBytes in
+			let pos = eval_to ctx pos HI32 in
+			let r = eval_to ctx v HI32 in
+			op ctx (OSetUI16 (b, pos, r));
 			r
 			r
 		| "$bseti32", [b;pos;v] ->
 		| "$bseti32", [b;pos;v] ->
 			let b = eval_to ctx b HBytes in
 			let b = eval_to ctx b HBytes in
@@ -1259,11 +1265,11 @@ and eval_expr ctx e =
 				(match t with
 				(match t with
 				| HUI8 ->
 				| HUI8 ->
 					let r = alloc_tmp ctx HI32 in
 					let r = alloc_tmp ctx HI32 in
-					op ctx (OGetI8 (r, b, pos));
+					op ctx (OGetUI8 (r, b, pos));
 					r
 					r
 				| HUI16 ->
 				| HUI16 ->
 					let r = alloc_tmp ctx HI32 in
 					let r = alloc_tmp ctx HI32 in
-					op ctx (OGetI16 (r, b, shl ctx pos 1));
+					op ctx (OGetUI16 (r, b, shl ctx pos 1));
 					r
 					r
 				| HI32 ->
 				| HI32 ->
 					let r = alloc_tmp ctx HI32 in
 					let r = alloc_tmp ctx HI32 in
@@ -1290,11 +1296,11 @@ and eval_expr ctx e =
 				(match t with
 				(match t with
 				| HUI8 ->
 				| HUI8 ->
 					let v = eval_to ctx value HI32 in
 					let v = eval_to ctx value HI32 in
-					op ctx (OSetI8 (b, pos, v));
+					op ctx (OSetUI8 (b, pos, v));
 					v
 					v
 				| HUI16 ->
 				| HUI16 ->
 					let v = eval_to ctx value HI32 in
 					let v = eval_to ctx value HI32 in
-					op ctx (OSetI16 (b, shl ctx pos 1, v));
+					op ctx (OSetUI16 (b, shl ctx pos 1, v));
 					v
 					v
 				| HI32 ->
 				| HI32 ->
 					let v = eval_to ctx value HI32 in
 					let v = eval_to ctx value HI32 in
@@ -1312,11 +1318,17 @@ and eval_expr ctx e =
 					abort ("Unsupported basic type " ^ tstr t) e.epos)
 					abort ("Unsupported basic type " ^ tstr t) e.epos)
 			| _ ->
 			| _ ->
 				abort "Invalid BytesAccess" eb.epos);
 				abort "Invalid BytesAccess" eb.epos);
-		| "$bgeti8", [b;pos] ->
+		| "$bgetui8", [b;pos] ->
+			let b = eval_to ctx b HBytes in
+			let pos = eval_to ctx pos HI32 in
+			let r = alloc_tmp ctx HI32 in
+			op ctx (OGetUI8 (r, b, pos));
+			r
+		| "$bgetui16", [b;pos] ->
 			let b = eval_to ctx b HBytes in
 			let b = eval_to ctx b HBytes in
 			let pos = eval_to ctx pos HI32 in
 			let pos = eval_to ctx pos HI32 in
 			let r = alloc_tmp ctx HI32 in
 			let r = alloc_tmp ctx HI32 in
-			op ctx (OGetI8 (r, b, pos));
+			op ctx (OGetUI16 (r, b, pos));
 			r
 			r
 		| "$bgeti32", [b;pos] ->
 		| "$bgeti32", [b;pos] ->
 			let b = eval_to ctx b HBytes in
 			let b = eval_to ctx b HBytes in
@@ -1939,7 +1951,7 @@ and eval_expr ctx e =
 			op ctx (OCall1 (b,alloc_std ctx "alloc_bytes" [HI32] HBytes,size));
 			op ctx (OCall1 (b,alloc_std ctx "alloc_bytes" [HI32] HBytes,size));
 			list_iteri (fun i e ->
 			list_iteri (fun i e ->
 				let r = eval_to ctx e HI32 in
 				let r = eval_to ctx e HI32 in
-				op ctx (OSetI16 (b,reg_int ctx (i * 2),r));
+				op ctx (OSetUI16 (b,reg_int ctx (i * 2),r));
 			) el;
 			) el;
 			op ctx (OCall2 (r, alloc_fun_path ctx (["hl";"types"],"ArrayBase") "allocUI16", b, reg_int ctx (List.length el)));
 			op ctx (OCall2 (r, alloc_fun_path ctx (["hl";"types"],"ArrayBase") "allocUI16", b, reg_int ctx (List.length el)));
 		| HF32 ->
 		| HF32 ->

+ 4 - 4
src/generators/hl2c.ml

@@ -1006,9 +1006,9 @@ let write_c version file (code:code) =
 				sexpr "hl_throw((vdynamic*)%s)" (reg r)
 				sexpr "hl_throw((vdynamic*)%s)" (reg r)
 			| ORethrow r ->
 			| ORethrow r ->
 				sexpr "hl_rethrow((vdynamic*)%s)" (reg r)
 				sexpr "hl_rethrow((vdynamic*)%s)" (reg r)
-			| OGetI8 (r,b,idx) ->
+			| OGetUI8 (r,b,idx) ->
 				sexpr "%s = *(unsigned char*)(%s + %s)" (reg r) (reg b) (reg idx)
 				sexpr "%s = *(unsigned char*)(%s + %s)" (reg r) (reg b) (reg idx)
-			| OGetI16 (r,b,idx) ->
+			| OGetUI16 (r,b,idx) ->
 				sexpr "%s = *(unsigned short*)(%s + %s)" (reg r) (reg b) (reg idx)
 				sexpr "%s = *(unsigned short*)(%s + %s)" (reg r) (reg b) (reg idx)
 			| OGetI32 (r,b,idx) ->
 			| OGetI32 (r,b,idx) ->
 				sexpr "%s = *(int*)(%s + %s)" (reg r) (reg b) (reg idx)
 				sexpr "%s = *(int*)(%s + %s)" (reg r) (reg b) (reg idx)
@@ -1018,9 +1018,9 @@ let write_c version file (code:code) =
 				sexpr "%s = *(double*)(%s + %s)" (reg r) (reg b) (reg idx)
 				sexpr "%s = *(double*)(%s + %s)" (reg r) (reg b) (reg idx)
 			| OGetArray (r, arr, idx) ->
 			| OGetArray (r, arr, idx) ->
 				sexpr "%s = ((%s*)(%s + 1))[%s]" (reg r) (ctype (rtype r)) (reg arr) (reg idx)
 				sexpr "%s = ((%s*)(%s + 1))[%s]" (reg r) (ctype (rtype r)) (reg arr) (reg idx)
-			| OSetI8 (b,idx,r) ->
+			| OSetUI8 (b,idx,r) ->
 				sexpr "*(unsigned char*)(%s + %s) = (unsigned char)%s" (reg b) (reg idx) (reg r)
 				sexpr "*(unsigned char*)(%s + %s) = (unsigned char)%s" (reg b) (reg idx) (reg r)
-			| OSetI16 (b,idx,r) ->
+			| OSetUI16 (b,idx,r) ->
 				sexpr "*(unsigned short*)(%s + %s) = (unsigned short)%s" (reg b) (reg idx) (reg r)
 				sexpr "*(unsigned short*)(%s + %s) = (unsigned short)%s" (reg b) (reg idx) (reg r)
 			| OSetI32 (b,idx,r) ->
 			| OSetI32 (b,idx,r) ->
 				sexpr "*(int*)(%s + %s) = %s" (reg b) (reg idx) (reg r)
 				sexpr "*(int*)(%s + %s) = %s" (reg b) (reg idx) (reg r)

+ 8 - 8
src/generators/hlcode.ml

@@ -164,14 +164,14 @@ type opcode =
 	| OTrap of reg * int
 	| OTrap of reg * int
 	| OEndTrap of bool
 	| OEndTrap of bool
 	(* memory access *)
 	(* memory access *)
-	| OGetI8 of reg * reg * reg
-	| OGetI16 of reg * reg * reg
+	| OGetUI8 of reg * reg * reg
+	| OGetUI16 of reg * reg * reg
 	| OGetI32 of reg * reg * reg
 	| OGetI32 of reg * reg * reg
 	| OGetF32 of reg * reg * reg
 	| OGetF32 of reg * reg * reg
 	| OGetF64 of reg * reg * reg
 	| OGetF64 of reg * reg * reg
 	| OGetArray of reg * reg * reg
 	| OGetArray of reg * reg * reg
-	| OSetI8 of reg * reg * reg
-	| OSetI16 of reg * reg * reg
+	| OSetUI8 of reg * reg * reg
+	| OSetUI16 of reg * reg * reg
 	| OSetI32 of reg * reg * reg
 	| OSetI32 of reg * reg * reg
 	| OSetF32 of reg * reg * reg
 	| OSetF32 of reg * reg * reg
 	| OSetF64 of reg * reg * reg
 	| OSetF64 of reg * reg * reg
@@ -525,14 +525,14 @@ let ostr fstr o =
 	| OSetThis (i,r) -> Printf.sprintf "setthis [%d],%d" i r
 	| OSetThis (i,r) -> Printf.sprintf "setthis [%d],%d" i r
 	| OThrow r -> Printf.sprintf "throw %d" r
 	| OThrow r -> Printf.sprintf "throw %d" r
 	| ORethrow r -> Printf.sprintf "rethrow %d" r
 	| ORethrow r -> Printf.sprintf "rethrow %d" r
-	| OGetI8 (r,b,p) -> Printf.sprintf "geti8 %d,%d[%d]" r b p
-	| OGetI16 (r,b,p) -> Printf.sprintf "geti16 %d,%d[%d]" r b p
+	| OGetUI8 (r,b,p) -> Printf.sprintf "getui8 %d,%d[%d]" r b p
+	| OGetUI16 (r,b,p) -> Printf.sprintf "getui16 %d,%d[%d]" r b p
 	| OGetI32 (r,b,p) -> Printf.sprintf "geti32 %d,%d[%d]" r b p
 	| OGetI32 (r,b,p) -> Printf.sprintf "geti32 %d,%d[%d]" r b p
 	| OGetF32 (r,b,p) -> Printf.sprintf "getf32 %d,%d[%d]" r b p
 	| OGetF32 (r,b,p) -> Printf.sprintf "getf32 %d,%d[%d]" r b p
 	| OGetF64 (r,b,p) -> Printf.sprintf "getf64 %d,%d[%d]" r b p
 	| OGetF64 (r,b,p) -> Printf.sprintf "getf64 %d,%d[%d]" r b p
 	| OGetArray (r,a,i) -> Printf.sprintf "getarray %d,%d[%d]" r a i
 	| OGetArray (r,a,i) -> Printf.sprintf "getarray %d,%d[%d]" r a i
-	| OSetI8 (r,p,v) -> Printf.sprintf "seti8 %d,%d,%d" r p v
-	| OSetI16 (r,p,v) -> Printf.sprintf "seti16 %d,%d,%d" r p v
+	| OSetUI8 (r,p,v) -> Printf.sprintf "setui8 %d,%d,%d" r p v
+	| OSetUI16 (r,p,v) -> Printf.sprintf "setui16 %d,%d,%d" r p v
 	| OSetI32 (r,p,v) -> Printf.sprintf "seti32 %d,%d,%d" r p v
 	| OSetI32 (r,p,v) -> Printf.sprintf "seti32 %d,%d,%d" r p v
 	| OSetF32 (r,p,v) -> Printf.sprintf "setf32 %d,%d,%d" r p v
 	| OSetF32 (r,p,v) -> Printf.sprintf "setf32 %d,%d,%d" r p v
 	| OSetF64 (r,p,v) -> Printf.sprintf "setf64 %d,%d,%d" r p v
 	| OSetF64 (r,p,v) -> Printf.sprintf "setf64 %d,%d,%d" r p v

+ 6 - 14
src/generators/hlinterp.ml

@@ -879,11 +879,11 @@ let interp code =
 			| ORethrow r ->
 			| ORethrow r ->
 				stack := List.rev !exc_stack @ !stack;
 				stack := List.rev !exc_stack @ !stack;
 				throw (get r)
 				throw (get r)
-			| OGetI8 (r,b,p) ->
+			| OGetUI8 (r,b,p) ->
 				(match get b, get p with
 				(match get b, get p with
 				| VBytes b, VInt p -> set r (VInt (Int32.of_int (int_of_char (String.get b (Int32.to_int p)))))
 				| VBytes b, VInt p -> set r (VInt (Int32.of_int (int_of_char (String.get b (Int32.to_int p)))))
 				| _ -> assert false)
 				| _ -> assert false)
-			| OGetI16 (r,b,p) ->
+			| OGetUI16 (r,b,p) ->
 				(match get b, get p with
 				(match get b, get p with
 				| VBytes b, VInt p ->
 				| VBytes b, VInt p ->
 					let a = int_of_char (String.get b (Int32.to_int p)) in
 					let a = int_of_char (String.get b (Int32.to_int p)) in
@@ -909,11 +909,11 @@ let interp code =
 				(match get a, get i with
 				(match get a, get i with
 				| VArray (a,_), VInt i -> set r a.(Int32.to_int i)
 				| VArray (a,_), VInt i -> set r a.(Int32.to_int i)
 				| _ -> assert false);
 				| _ -> assert false);
-			| OSetI8 (r,p,v) ->
+			| OSetUI8 (r,p,v) ->
 				(match get r, get p, get v with
 				(match get r, get p, get v with
 				| VBytes b, VInt p, VInt v -> String.set b (Int32.to_int p) (char_of_int ((Int32.to_int v) land 0xFF))
 				| VBytes b, VInt p, VInt v -> String.set b (Int32.to_int p) (char_of_int ((Int32.to_int v) land 0xFF))
 				| _ -> assert false)
 				| _ -> assert false)
-			| OSetI16 (r,p,v) ->
+			| OSetUI16 (r,p,v) ->
 				(match get r, get p, get v with
 				(match get r, get p, get v with
 				| VBytes b, VInt p, VInt v ->
 				| VBytes b, VInt p, VInt v ->
 					String.set b (Int32.to_int p) (char_of_int ((Int32.to_int v) land 0xFF));
 					String.set b (Int32.to_int p) (char_of_int ((Int32.to_int v) land 0xFF));
@@ -2076,11 +2076,7 @@ let check code =
 				reg a HArray;
 				reg a HArray;
 				reg i HI32;
 				reg i HI32;
 				ignore(rtype v);
 				ignore(rtype v);
-			| OGetI8 (r,b,p) ->
-				reg r HI32;
-				reg b HBytes;
-				reg p HI32;
-			| OGetI32 (r,b,p) | OGetI16(r,b,p) ->
+			| OGetUI8 (r,b,p) | OGetI32 (r,b,p) | OGetUI16(r,b,p) ->
 				reg r HI32;
 				reg r HI32;
 				reg b HBytes;
 				reg b HBytes;
 				reg p HI32;
 				reg p HI32;
@@ -2092,11 +2088,7 @@ let check code =
 				reg r HF64;
 				reg r HF64;
 				reg b HBytes;
 				reg b HBytes;
 				reg p HI32;
 				reg p HI32;
-			| OSetI8 (r,p,v) ->
-				reg r HBytes;
-				reg p HI32;
-				reg v HI32;
-			| OSetI32 (r,p,v) | OSetI16 (r,p,v) ->
+			| OSetUI8 (r,p,v) | OSetI32 (r,p,v) | OSetUI16 (r,p,v) ->
 				reg r HBytes;
 				reg r HBytes;
 				reg p HI32;
 				reg p HI32;
 				reg v HI32;
 				reg v HI32;

+ 2 - 2
src/generators/hlopt.ml

@@ -113,9 +113,9 @@ let opcode_fx frw op =
 		()
 		()
 	| OEndTrap _ ->
 	| OEndTrap _ ->
 		() (* ??? *)
 		() (* ??? *)
-	| OGetI8 (d,a,b) | OGetI16 (d,a,b) | OGetI32 (d,a,b) | OGetF32 (d,a,b) | OGetF64 (d,a,b) | OGetArray (d,a,b) ->
+	| OGetUI8 (d,a,b) | OGetUI16 (d,a,b) | OGetI32 (d,a,b) | OGetF32 (d,a,b) | OGetF64 (d,a,b) | OGetArray (d,a,b) ->
 		read a; read b; write d
 		read a; read b; write d
-	| OSetI8 (a,b,c) | OSetI16 (a,b,c) | OSetI32 (a,b,c) | OSetF32 (a,b,c) | OSetF64 (a,b,c) | OSetArray (a,b,c) ->
+	| OSetUI8 (a,b,c) | OSetUI16 (a,b,c) | OSetI32 (a,b,c) | OSetF32 (a,b,c) | OSetF64 (a,b,c) | OSetArray (a,b,c) ->
 		read a; read b; read c
 		read a; read b; read c
 	| ONew d ->
 	| ONew d ->
 		write d
 		write d

+ 4 - 5
std/hl/types/Bytes.hx

@@ -31,11 +31,11 @@ package hl.types;
 	}
 	}
 
 
 	@:extern @:arrayAccess public inline function getUI8( pos : Int ) : Int {
 	@:extern @:arrayAccess public inline function getUI8( pos : Int ) : Int {
-		return untyped $bgeti8(this,pos);
+		return untyped $bgetui8(this,pos);
 	}
 	}
 
 
 	@:extern @:arrayAccess public inline function setUI8( pos : Int, value : Int ) : Int {
 	@:extern @:arrayAccess public inline function setUI8( pos : Int, value : Int ) : Int {
-		untyped $bseti8(this,pos,value);
+		untyped $bsetui8(this,pos,value);
 		return value;
 		return value;
 	}
 	}
 
 
@@ -44,12 +44,11 @@ package hl.types;
 	}
 	}
 
 
 	public inline function getUI16( pos : Int ) : Int {
 	public inline function getUI16( pos : Int ) : Int {
-		return getUI8(pos) | (getUI8(pos+1) << 8);
+		return untyped $bgetui16(this, pos);
 	}
 	}
 
 
 	public inline function setUI16( pos : Int, v : Int ) {
 	public inline function setUI16( pos : Int, v : Int ) {
-		setUI8(pos, v);
-		setUI8(pos + 1, v>>8);
+		untyped $bsetui16(this,pos,v);
 	}
 	}
 
 
 	@:extern public inline function getF32( pos : Int ) : F32 {
 	@:extern public inline function getF32( pos : Int ) : F32 {