Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
FORMUS3IC_LAS3
/
embb
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
07ba251e
authored
7 years ago
by
Mike
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
forgot to push: small changes in atomics (variable name) and time.c
parent
ac1d3297
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
9 additions
and
15 deletions
+9
-15
base_c/include/embb/base/c/internal/atomic/and_assign.h
+1
-2
base_c/include/embb/base/c/internal/atomic/fetch_and_add.h
+1
-2
base_c/include/embb/base/c/internal/atomic/or_assign.h
+1
-2
base_c/include/embb/base/c/internal/atomic/xor_assign.h
+1
-2
base_c/src/time.c
+5
-7
No files found.
base_c/include/embb/base/c/internal/atomic/and_assign.h
View file @
07ba251e
...
...
@@ -137,14 +137,13 @@ EMBB_DEFINE_AND_ASSIGN(4, "")
uint32_t width = sizeof(value) == sizeof(uint32_t) ? 31 : sizeof(value) * 8; \
register uint64_t e_ins = ((uint64_t)width << 32) | pos; \
__asm__ __volatile__ ("dsync\n\t" \
"mov.a %[pointer_to_value], %[add]\n\t" \
"loop_%=:\tld.w %H0, [%2]0\n\t" \
"insert %L0, %H0, %[value], %A1\n\t" \
"and %L0, %H0\n\t" \
"cmpswap.w [%2]0, %A0\n\t" \
"jne %H0, %L0, loop_%=" \
: "+d"(e_reg), [e_ins]"+d"(e_ins) \
: [
pointer_to_value]"a"(pointer_to_value), [value] "r" (value), [add] "d" (add
) \
: [
add]"a"(add), [value] "r" (value
) \
: "memory"); \
}
#else
...
...
This diff is collapsed.
Click to expand it.
base_c/include/embb/base/c/internal/atomic/fetch_and_add.h
View file @
07ba251e
...
...
@@ -130,7 +130,6 @@ EMBB_DEFINE_FETCH_AND_ADD(4, "")
uint32_t width = sizeof(new_value) == sizeof(uint32_t) ? 31 : sizeof(new_value) * 8; \
register uint64_t e_mask = ((uint64_t)width << 32) | pos; \
__asm__ __volatile__ ("dsync\n\t" \
"mov.a %[pointer_to_value], %[add]\n\t" \
"loop_%=:\tld.w %H0, [%3]0\n\t" \
"insert %L0, %L0, %[new_value], %A1\n\t" \
"add" EMBB_ATOMIC_TC_SIZE_SUFFIX " %L0, %L0, %H0\n\t" \
...
...
@@ -138,7 +137,7 @@ EMBB_DEFINE_FETCH_AND_ADD(4, "")
"jne %H0, %L0, loop_%=\n\t" \
"extr %[result], %H0, %A1" \
: "+d"(e_reg), [e_mask]"+d"(e_mask), [result] "=&d" (result) \
: [
pointer_to_value]"a"(pointer_to_value), [new_value] "r" (new_value), [add] "d" (add
) \
: [
add]"a"(add), [new_value] "r" (new_value
) \
: "memory"); \
return result; \
}
...
...
This diff is collapsed.
Click to expand it.
base_c/include/embb/base/c/internal/atomic/or_assign.h
View file @
07ba251e
...
...
@@ -122,14 +122,13 @@ EMBB_DEFINE_OR_ASSIGN(4, "")
uint32_t width = sizeof(value) == sizeof(uint32_t) ? 31 : sizeof(value) * 8; \
register uint64_t e_ins = ((uint64_t)width << 32) | pos; \
__asm__ __volatile__ ("dsync\n\t" \
"mov.a %[pointer_to_value], %[add]\n\t" \
"loop_%=:\tld.w %H0, [%2]0\n\t" \
"insert %L0, %L0, %[value], %A1\n\t" \
"or %L0, %H0\n\t" \
"cmpswap.w [%2]0, %A0\n\t" \
"jne %H0, %L0, loop_%=" \
: "+d"(e_reg), [e_ins]"+d"(e_ins) \
: [
pointer_to_value]"a"(pointer_to_value), [value] "r" (value), [add] "d" (add
) \
: [
add]"a"(add), [value] "r" (value
) \
: "memory"); \
}
...
...
This diff is collapsed.
Click to expand it.
base_c/include/embb/base/c/internal/atomic/xor_assign.h
View file @
07ba251e
...
...
@@ -125,14 +125,13 @@ EMBB_DEFINE_XOR_ASSIGN(4, "")
uint32_t width = sizeof(value) == sizeof(uint32_t) ? 31 : sizeof(value) * 8; \
register uint64_t e_ins = ((uint64_t)width << 32) | pos; \
__asm__ __volatile__ ("dsync\n\t" \
"mov.a %[pointer_to_value], %[add]\n\t" \
"loop_%=:\tld.w %H0, [%2]0\n\t" \
"insert %L0, %L0, %[value], %A1\n\t" \
"xor %L0, %H0\n\t" \
"cmpswap.w [%2]0, %A0\n\t" \
"jne %H0, %L0, loop_%=" \
: "+d"(e_reg), [e_ins]"+d"(e_ins) \
: [
pointer_to_value]"a"(pointer_to_value), [value] "r" (value), [add] "d" (add
) \
: [
add]"a"(add), [value] "r" (value
) \
: "memory"); \
}
...
...
This diff is collapsed.
Click to expand it.
base_c/src/time.c
View file @
07ba251e
...
...
@@ -114,18 +114,16 @@ int embb_time_in(embb_time_t* time, const embb_duration_t* duration) {
return
EMBB_ERROR
;
}
uint64_t
ticks_count
=
xTaskGetTickCount
();
time
->
seconds
=
ticks_count
/
configTICK_RATE_HZ
;
time
->
nanoseconds
=
((
ticks_count
%
configTICK_RATE_HZ
)
*
1000000000ul
)
/
configTICK_RATE_HZ
;
uint32_t
ticks_count
=
xTaskGetTickCount
();
time
->
seconds
=
ticks_count
;
ticks_count
=
(
uint64_t
)(
duration
->
seconds
*
configTICK_RATE_HZ
+
(
duration
->
nanoseconds
*
configTICK_RATE_HZ
/
1000000000ul
));
uint64_t
duration_ticks
=
(
uint64_t
)(
duration
->
seconds
*
configTICK_RATE_HZ
+
(
duration
->
nanoseconds
*
configTICK_RATE_HZ
/
1000000000ul
));
if
(
ticks_count
>
UINT32_MAX
||
time
->
seconds
+
duration
->
seconds
>
EMBB_TIME_MAX_SECONDS
)
{
if
(
(
uint64_t
)
(
time
->
seconds
+
duration_ticks
)
>
UINT32_MAX
)
{
return
EMBB_OVERFLOW
;
}
time
->
seconds
+=
duration
->
seconds
;
time
->
nanoseconds
+=
duration
->
nanoseconds
;
time
->
seconds
+=
duration_ticks
;
return
EMBB_SUCCESS
;
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
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