Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Tanzeem Haque
gdsl-toolkit
Commits
85e3a35d
Commit
85e3a35d
authored
Aug 22, 2014
by
Julian Kranz
Browse files
Endianness
parent
0c1fb475
Changes
3
Hide whitespace changes
Inline
Side-by-side
detail/codegen/c1/runtime.c
View file @
85e3a35d
...
...
@@ -219,8 +219,12 @@ static inline int_t consume(state_t s, char size) {
longjmp
(
s
->
err_tgt
,
1
);
};
int_t
result
=
0
;
char
size_left
=
size
;
while
(
size_left
)
{
if
(
!
s
->
buf_be
)
{
while
(
size
)
result
|=
*
(
s
->
ip
++
)
<<
(
--
size
*
8
);
return
result
;
}
while
(
size
)
{
char
be_buf_left
=
-
((
size_t
)
s
->
buf_be
)
&
(
s
->
token_size
-
1
);
if
(
!
be_buf_left
)
{
s
->
buf_be
-=
s
->
token_size
;
...
...
@@ -229,8 +233,8 @@ static inline int_t consume(state_t s, char size) {
s
->
buf_be
[
i
]
=
s
->
le
?
s
->
ip
[
s
->
token_size
-
i
-
1
]
:
s
->
ip
[
i
];
be_buf_left
+=
s
->
token_size
;
}
for
(;
be_buf_left
&&
size
_left
;
be_buf_left
--
)
{
result
|=
*
(
s
->
buf_be
++
)
<<
(
--
size
_left
*
8
);
for
(;
be_buf_left
&&
size
;
be_buf_left
--
)
{
result
|=
*
(
s
->
buf_be
++
)
<<
(
--
size
*
8
);
s
->
ip
++
;
}
}
...
...
@@ -238,6 +242,10 @@ static inline int_t consume(state_t s, char size) {
}
static
inline
void
unconsume
(
state_t
s
,
char
size
)
{
if
(
!
s
->
buf_be
)
{
s
->
ip
-=
size
;
return
;
}
char
be_buf_consumed
=
((
size_t
)
s
->
buf_be
)
&
(
s
->
token_size
-
1
);
if
(
size
<
be_buf_consumed
)
{
s
->
buf_be
-=
size
;
...
...
@@ -261,8 +269,34 @@ static inline void unconsume(state_t s, char size) {
void
@
endianness
@
(
state_t
s
,
int_t
kind
,
int_t
size
)
{
(
state_t
s
,
int_t
le
,
int_t
size
)
{
if
(
size
!=
1
&&
size
!=
2
&&
size
!=
4
&&
size
!=
8
)
{
s
->
err_str
=
"GDSL runtime: endianness(); invalid token size"
;
longjmp
(
s
->
err_tgt
,
100
);
};
char
be_buf_consumed
=
((
size_t
)
s
->
buf_be
)
&
(
s
->
token_size
-
1
);
if
(
be_buf_consumed
)
{
s
->
err_str
=
"GDSL runtime: endianness(); unable to change endianness settings within a token"
;
longjmp
(
s
->
err_tgt
,
101
);
};
if
(
size
==
1
||
!
le
)
{
if
(
s
->
buf_be
)
{
s
->
buf_be
=
(
unsigned
char
*
)(((
size_t
)
s
->
buf_be
|
(
s
->
token_size
-
1
))
-
s
->
token_size
+
1
);
free
(
s
->
buf_be
);
s
->
buf_be
=
0
;
}
}
else
{
if
(
!
s
->
buf_be
)
s
->
buf_be
=
(
unsigned
char
*
)
malloc
(
size
);
else
{
s
->
buf_be
-=
s
->
token_size
;
if
(
size
>
s
->
token_size
)
s
->
buf_be
=
(
unsigned
char
*
)
realloc
(
s
->
buf_be
,
size
);
}
s
->
buf_be
+=
size
;
}
s
->
token_size
=
size
;
s
->
le
=
(
char
)
le
;
}
static
int_t
vec_to_signed
(
state_t
s
,
vec_t
v
)
{
...
...
@@ -377,8 +411,11 @@ void
free
(
heap
);
heap
=
prev
;
}
s
->
buf_be
=
(
unsigned
char
*
)(((
size_t
)
s
->
buf_be
|
(
s
->
token_size
-
1
))
-
s
->
token_size
+
1
);
free
(
s
->
buf_be
);
if
(
s
->
buf_be
)
{
char
be_buf_left
=
-
((
size_t
)
s
->
buf_be
)
&
(
s
->
token_size
-
1
);
s
->
buf_be
+=
be_buf_left
-
s
->
token_size
;
free
(
s
->
buf_be
);
}
free
(
s
);
}
...
...
@@ -407,8 +444,8 @@ state_t
/*
* Todo: Handle alignment error
*/
s
->
buf_be
=
(
unsigned
char
*
)
malloc
(
s
->
token_size
);
s
->
buf_be
+=
s
->
token_size
;
@
endianness
@
(
s
,
0
,
1
)
;
return
s
;
}
...
...
specifications/x86/x86.ml
View file @
85e3a35d
...
...
@@ -21,7 +21,7 @@ val config-default-opnd-sz-32 = '10'
val
test
-
opt
opt
config
=
if
(
zx
(
opt
and
config
))
>
0
then
'
1
'
else
'
0
'
val
decode
config
=
do
set
-
endianness
LITTLE_ENDIAN
1
;
set
-
endianness
LITTLE_ENDIAN
2
;
update
@
{
tab
=
void
};
main
config
end
...
...
tools/sweep.c
View file @
85e3a35d
...
...
@@ -85,6 +85,8 @@ int main(int argc, char** argv) {
char
*
buffer
=
(
char
*
)
malloc
(
buffer_size
);
size_t
buffer_length
=
fread
(
buffer
,
1
,
buffer_size
,
f
);
fclose
(
f
);
state_t
state
=
gdsl_init
();
gdsl_set_code
(
state
,
buffer
,
buffer_length
,
0
);
...
...
@@ -151,6 +153,7 @@ int main(int argc, char** argv) {
long
time
=
end
.
tv_sec
*
NANOS
+
end
.
tv_nsec
-
start
.
tv_nsec
-
start
.
tv_sec
*
NANOS
;
gdsl_destroy
(
state
);
free
(
buffer
);
fprintf
(
stderr
,
"---------------------------
\n
"
);
fprintf
(
stderr
,
"Statistics
\n
"
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment