1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-07-01 13:50:36 +00:00

Remove all _SHR & _SHL changes

This commit is contained in:
Samuel Gomes 2022-09-01 16:15:42 +05:30
parent 5812433b9d
commit f99eb27717
4 changed files with 17 additions and 143 deletions

View file

@ -98,8 +98,8 @@
# endif
# endif
// QB64 string descriptor structure
struct qbs_field {
// QB64 string descriptor structure
struct qbs_field {
int32 fileno;
int64 fileid;
int64 size;

View file

@ -1196,23 +1196,10 @@ inline uint64_t func__ror64(uint64_t value, unsigned int count) {
}
// a740g: ROR & ROL additions end
// a740g: SHL & SHR fixes start
inline uint8_t func__shl8(uint8_t value, unsigned int count) { return value << count; }
// bit-shifting
inline uint64 func__shl(uint64 a1, int b1) { return a1 << b1; }
inline uint8_t func__shr8(uint8_t value, unsigned int count) { return value >> count; }
inline uint16_t func__shl16(uint16_t value, unsigned int count) { return value << count; }
inline uint16_t func__shr16(uint16_t value, unsigned int count) { return value >> count; }
inline uint32_t func__shl32(uint32_t value, unsigned int count) { return value << count; }
inline uint32_t func__shr32(uint32_t value, unsigned int count) { return value >> count; }
inline uint64_t func__shl64(uint64_t value, unsigned int count) { return value << count; }
inline uint64_t func__shr64(uint64_t value, unsigned int count) { return value >> count; }
// a740g: SHL & SHR fixes end
inline uint64 func__shr(uint64 a1, int b1) { return a1 >> b1; }
inline int64 func__readbit(uint64 a1, int b1) {
if (a1 & 1ull << b1)

View file

@ -16384,8 +16384,9 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
IF Error_Happened THEN EXIT FUNCTION
'------------------------------------------------------------------------------------------------------------
' a740g: ROR support
IF n$ = "_ROR" OR (n$ = "ROR" AND qb64prefix_set = 1) THEN
' a740g: ROR & ROL support
IF n$ = "_ROR" OR (n$ = "ROR" AND qb64prefix_set = 1) OR n$ = "_ROL" OR (n$ = "ROL" AND qb64prefix_set = 1) THEN
rotlr_n$ = LCASE$(RIGHT$(n$, 3)) ' Get the last 3 characters and convert to lower case. We'll need this to construct the C call
IF curarg = 1 THEN ' First paramater
IF (sourcetyp AND ISSTRING) OR (sourcetyp AND ISFLOAT) OR (sourcetyp AND ISOFFSET) OR (sourcetyp AND ISUDT) THEN ' Bad parameters types
Give_Error "Expected non-floating-point value"
@ -16393,18 +16394,18 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
END IF
IF sourcetyp AND ISREFERENCE THEN e$ = refer(e$, sourcetyp, 0) ' This gets the C-style dereferencing syntax for an identifier (I think XD)
IF Error_Happened THEN EXIT FUNCTION
'establish which function (if any!) should be used
' Establish which function (if any!) should be used
IF (sourcetyp AND 511) = 8 THEN ' sourcetyp is the type of data (bits can be examined to get more details)
e$ = "func__ror8(" + e$
e$ = "func__" + rotlr_n$ + "8(" + e$
typ& = UBYTETYPE - ISPOINTER ' We force the return type here. This passed back up to the caller
ELSEIF (sourcetyp AND 511) = 16 THEN
e$ = "func__ror16(" + e$
e$ = "func__" + rotlr_n$ + "16(" + e$
typ& = UINTEGERTYPE - ISPOINTER
ELSEIF (sourcetyp AND 511) = 32 THEN
e$ = "func__ror32(" + e$
e$ = "func__" + rotlr_n$ + "32(" + e$
typ& = ULONGTYPE - ISPOINTER
ELSEIF (sourcetyp AND 511) = 64 THEN
e$ = "func__ror64(" + e$
e$ = "func__" + rotlr_n$ + "64(" + e$
typ& = UINTEGER64TYPE - ISPOINTER
ELSE
Give_Error "Unknown data size"
@ -16421,117 +16422,6 @@ FUNCTION evaluatefunc$ (a2$, args AS LONG, typ AS LONG)
END IF
END IF
' a740g: ROL support
IF n$ = "_ROL" OR (n$ = "ROL" AND qb64prefix_set = 1) THEN
IF curarg = 1 THEN
IF (sourcetyp AND ISSTRING) OR (sourcetyp AND ISFLOAT) OR (sourcetyp AND ISOFFSET) OR (sourcetyp AND ISUDT) THEN
Give_Error "Expected non-floating-point value"
EXIT FUNCTION
END IF
IF sourcetyp AND ISREFERENCE THEN e$ = refer(e$, sourcetyp, 0)
IF Error_Happened THEN EXIT FUNCTION
'establish which function (if any!) should be used
IF (sourcetyp AND 511) = 8 THEN
e$ = "func__rol8(" + e$
typ& = UBYTETYPE - ISPOINTER
ELSEIF (sourcetyp AND 511) = 16 THEN
e$ = "func__rol16(" + e$
typ& = UINTEGERTYPE - ISPOINTER
ELSEIF (sourcetyp AND 511) = 32 THEN
e$ = "func__rol32(" + e$
typ& = ULONGTYPE - ISPOINTER
ELSEIF (sourcetyp AND 511) = 64 THEN
e$ = "func__rol64(" + e$
typ& = UINTEGER64TYPE - ISPOINTER
ELSE
Give_Error "Unknown data size"
EXIT FUNCTION
END IF
r$ = e$
e$ = ""
GOTO dontevaluate
ELSEIF curarg = 2 THEN
IF sourcetyp AND ISREFERENCE THEN e$ = refer(e$, sourcetyp, 0)
IF Error_Happened THEN EXIT FUNCTION
r$ = r$ + e$ + ")"
GOTO evalfuncspecial
END IF
END IF
' a740g: SHR support
IF n$ = "_SHR" OR (n$ = "SHR" AND qb64prefix_set = 1) THEN
IF curarg = 1 THEN
IF (sourcetyp AND ISSTRING) OR (sourcetyp AND ISFLOAT) OR (sourcetyp AND ISOFFSET) OR (sourcetyp AND ISUDT) THEN
Give_Error "Expected non-floating-point value"
EXIT FUNCTION
END IF
IF sourcetyp AND ISREFERENCE THEN e$ = refer(e$, sourcetyp, 0)
IF Error_Happened THEN EXIT FUNCTION
'establish which function (if any!) should be used
IF (sourcetyp AND 511) = 8 THEN
e$ = "func__shr8(" + e$
typ& = UBYTETYPE - ISPOINTER
ELSEIF (sourcetyp AND 511) = 16 THEN
e$ = "func__shr16(" + e$
typ& = UINTEGERTYPE - ISPOINTER
ELSEIF (sourcetyp AND 511) = 32 THEN
e$ = "func__shr32(" + e$
typ& = ULONGTYPE - ISPOINTER
ELSEIF (sourcetyp AND 511) = 64 THEN
e$ = "func__shr64(" + e$
typ& = UINTEGER64TYPE - ISPOINTER
ELSE
Give_Error "Unknown data size"
EXIT FUNCTION
END IF
r$ = e$
e$ = ""
GOTO dontevaluate
ELSEIF curarg = 2 THEN
IF sourcetyp AND ISREFERENCE THEN e$ = refer(e$, sourcetyp, 0)
IF Error_Happened THEN EXIT FUNCTION
r$ = r$ + e$ + ")"
GOTO evalfuncspecial
END IF
END IF
' a740g: SHL support
IF n$ = "_SHL" OR (n$ = "SHL" AND qb64prefix_set = 1) THEN
IF curarg = 1 THEN
IF (sourcetyp AND ISSTRING) OR (sourcetyp AND ISFLOAT) OR (sourcetyp AND ISOFFSET) OR (sourcetyp AND ISUDT) THEN
Give_Error "Expected non-floating-point value"
EXIT FUNCTION
END IF
IF sourcetyp AND ISREFERENCE THEN e$ = refer(e$, sourcetyp, 0)
IF Error_Happened THEN EXIT FUNCTION
'establish which function (if any!) should be used
IF (sourcetyp AND 511) = 8 THEN
e$ = "func__shl8(" + e$
typ& = UBYTETYPE - ISPOINTER
ELSEIF (sourcetyp AND 511) = 16 THEN
e$ = "func__shl16(" + e$
typ& = UINTEGERTYPE - ISPOINTER
ELSEIF (sourcetyp AND 511) = 32 THEN
e$ = "func__shl32(" + e$
typ& = ULONGTYPE - ISPOINTER
ELSEIF (sourcetyp AND 511) = 64 THEN
e$ = "func__shl64(" + e$
typ& = UINTEGER64TYPE - ISPOINTER
ELSE
Give_Error "Unknown data size"
EXIT FUNCTION
END IF
r$ = e$
e$ = ""
GOTO dontevaluate
ELSEIF curarg = 2 THEN
IF sourcetyp AND ISREFERENCE THEN e$ = refer(e$, sourcetyp, 0)
IF Error_Happened THEN EXIT FUNCTION
r$ = r$ + e$ + ")"
GOTO evalfuncspecial
END IF
END IF
'***special case***
IF n$ = "_MEM" OR (n$ = "MEM" AND qb64prefix_set = 1) THEN
IF curarg = 1 THEN

View file

@ -3667,15 +3667,13 @@ id.ret = LONGTYPE - ISPOINTER
id.hr_syntax = "_AUTODISPLAY"
regid
' a740: SHR & SHL fixes
' These are mostly stubs now as we handle these in evaluatefunc
clearid
id.n = qb64prefix$ + "SHR"
id.subfunc = 1
id.callname = "func__shr"
id.args = 2
id.arg = MKL$(UINTEGER64TYPE - ISPOINTER) + MKL$(ULONGTYPE - ISPOINTER) ' ***overridden by function evaluatefunc***
id.ret = UINTEGER64TYPE - ISPOINTER ' ***overridden by function evaluatefunc***
id.arg = MKL$(UINTEGER64TYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER)
id.ret = UINTEGER64TYPE - ISPOINTER
id.hr_syntax = "_SHR(numericalVariable, numericalValue)"
regid
@ -3684,11 +3682,10 @@ id.n = qb64prefix$ + "SHL"
id.subfunc = 1
id.callname = "func__shl"
id.args = 2
id.arg = MKL$(UINTEGER64TYPE - ISPOINTER) + MKL$(ULONGTYPE - ISPOINTER) ' ***overridden by function evaluatefunc***
id.ret = UINTEGER64TYPE - ISPOINTER ' ***overridden by function evaluatefunc***
id.arg = MKL$(UINTEGER64TYPE - ISPOINTER) + MKL$(LONGTYPE - ISPOINTER)
id.ret = UINTEGER64TYPE - ISPOINTER
id.hr_syntax = "_SHL(numericalVariable, numericalValue)"
regid
' a740: end of SHR & SHL fixes
' a740g: ROR & ROL additions
clearid