<feed xmlns='http://www.w3.org/2005/Atom'>
<title>freedom-e-sdk/software/dhrystone, branch useTimerIRQ</title>
<subtitle>my bad beginner RISC-V assembly LED blinking code.</subtitle>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/'/>
<entry>
<title>Update examples to pickup licenses</title>
<updated>2019-05-30T02:19:33+00:00</updated>
<author>
<name>Bunnaroath Sou</name>
<email>bsou@sifive.com</email>
</author>
<published>2019-05-30T02:19:33+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=6b5388d3950b2d2293c44ce35cf2772919b8af90'/>
<id>6b5388d3950b2d2293c44ce35cf2772919b8af90</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Setup default options for dhrystone release.</title>
<updated>2019-05-23T02:58:17+00:00</updated>
<author>
<name>Hsiang-Chia.Huang</name>
<email>hsiangchiah@sifive.com</email>
</author>
<published>2019-05-22T07:37:14+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=7817c5e85cb6f9f6d5b98f6702fa4b7d1fb99e02'/>
<id>7817c5e85cb6f9f6d5b98f6702fa4b7d1fb99e02</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Update Dhrystone and metal to remove nano &amp; pick memory.h</title>
<updated>2019-04-30T17:20:23+00:00</updated>
<author>
<name>Bunnaroath Sou</name>
<email>bsou@sifive.com</email>
</author>
<published>2019-04-29T18:02:31+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=1741292e512bc0659f7c7434ff056c7426758a4c'/>
<id>1741292e512bc0659f7c7434ff056c7426758a4c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Making dhrystone public</title>
<updated>2019-03-26T22:13:59+00:00</updated>
<author>
<name>Bunnaroath Sou</name>
<email>bsou@sifive.com</email>
</author>
<published>2019-03-26T19:07:46+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=96f7c530cc7ec894ed8c326a47dc496fb7b9c35f'/>
<id>96f7c530cc7ec894ed8c326a47dc496fb7b9c35f</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove legacy examples</title>
<updated>2019-03-07T17:29:05+00:00</updated>
<author>
<name>Nathaniel Graff</name>
<email>nathaniel.graff@sifive.com</email>
</author>
<published>2019-03-07T17:29:05+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=d9c3fba928162e7a89349f8b160eb479ad41cbea'/>
<id>d9c3fba928162e7a89349f8b160eb479ad41cbea</id>
<content type='text'>
Signed-off-by: Nathaniel Graff &lt;nathaniel.graff@sifive.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Nathaniel Graff &lt;nathaniel.graff@sifive.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Speed up Dhrystone on the HiFive1</title>
<updated>2017-11-17T23:24:01+00:00</updated>
<author>
<name>Palmer Dabbelt</name>
<email>palmer@dabbelt.com</email>
</author>
<published>2017-11-17T20:14:52+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=401b704e73599a36bfdc8c778dab85f94d74ed1d'/>
<id>401b704e73599a36bfdc8c778dab85f94d74ed1d</id>
<content type='text'>
There's a handful of things that went wrong here:

* The read-only data sections were mapped to flash, which is very slow.
  I just put them in the data segment, so they end up in the scratchpad.
  This is about a 10x hit, so it's really important.
* The toolchain was an old version, which didn't have a fast memcpy
  implementation on 32-bit systems.  This is about a 2x hit.
* Some compiler flags were incorrect, including
    * -Os instead of -O3
    * Missing -mexplicit-relocs
    * Missing -DNOENUM
    * Missing -falign-functions=4
  I haven't checked how much those hurt

With this, I get

$ make software BOARD=freedom-e300-hifive1 PROGRAM=dhrystone LINK_TARGET=dhrystone
$ make upload BOARD=freedom-e300-hifive1 PROGRAM=dhrystone LINK_TARGET=dhrystone
Execution starts, 10000000 runs through Dhrystone
Execution ends

Final values of the variables used in the benchmark:

Int_Glob:            5
        should be:   5
Bool_Glob:           1
        should be:   1
Ch_1_Glob:           A
        should be:   A
Ch_2_Glob:           B
        should be:   B
Arr_1_Glob[8]:       7
        should be:   7
Arr_2_Glob[8][7]:    10000010
        should be:   Number_Of_Runs + 10
Ptr_Glob-&gt;
  Ptr_Comp:          -2147470264
        should be:   (implementation-dependent)
  Discr:             0
        should be:   0
  Enum_Comp:         2
        should be:   2
  Int_Comp:          17
        should be:   17
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Next_Ptr_Glob-&gt;
  Ptr_Comp:          -2147470264
        should be:   (implementation-dependent), same as above
  Discr:             0
        should be:   0
  Enum_Comp:         1
        should be:   1
  Int_Comp:          18
        should be:   18
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Int_1_Loc:           5
        should be:   5
Int_2_Loc:           13
        should be:   13
Int_3_Loc:           7
        should be:   7
Enum_Loc:            1
        should be:   1
Str_1_Loc:           DHRYSTONE PROGRAM, 1'ST STRING
        should be:   DHRYSTONE PROGRAM, 1'ST STRING
Str_2_Loc:           DHRYSTONE PROGRAM, 2'ND STRING
        should be:   DHRYSTONE PROGRAM, 2'ND STRING

Microseconds for one run through Dhrystone: 1.3
Dhrystones per Second:                      714285.6

which is 1.55 DMIPS/MHz at 262 MHz.  It's still a bit slower than our
current stuff, but I don't remember what was actually in the HiFive1 so
I'm not sure what we should be getting.  I verified the clock is
accurate with a stopwatch.  I haven't bothered to go look through the
binary, but I think we're about 10 cycles off so it should be managable.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There's a handful of things that went wrong here:

* The read-only data sections were mapped to flash, which is very slow.
  I just put them in the data segment, so they end up in the scratchpad.
  This is about a 10x hit, so it's really important.
* The toolchain was an old version, which didn't have a fast memcpy
  implementation on 32-bit systems.  This is about a 2x hit.
* Some compiler flags were incorrect, including
    * -Os instead of -O3
    * Missing -mexplicit-relocs
    * Missing -DNOENUM
    * Missing -falign-functions=4
  I haven't checked how much those hurt

With this, I get

$ make software BOARD=freedom-e300-hifive1 PROGRAM=dhrystone LINK_TARGET=dhrystone
$ make upload BOARD=freedom-e300-hifive1 PROGRAM=dhrystone LINK_TARGET=dhrystone
Execution starts, 10000000 runs through Dhrystone
Execution ends

Final values of the variables used in the benchmark:

Int_Glob:            5
        should be:   5
Bool_Glob:           1
        should be:   1
Ch_1_Glob:           A
        should be:   A
Ch_2_Glob:           B
        should be:   B
Arr_1_Glob[8]:       7
        should be:   7
Arr_2_Glob[8][7]:    10000010
        should be:   Number_Of_Runs + 10
Ptr_Glob-&gt;
  Ptr_Comp:          -2147470264
        should be:   (implementation-dependent)
  Discr:             0
        should be:   0
  Enum_Comp:         2
        should be:   2
  Int_Comp:          17
        should be:   17
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Next_Ptr_Glob-&gt;
  Ptr_Comp:          -2147470264
        should be:   (implementation-dependent), same as above
  Discr:             0
        should be:   0
  Enum_Comp:         1
        should be:   1
  Int_Comp:          18
        should be:   18
  Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
        should be:   DHRYSTONE PROGRAM, SOME STRING
Int_1_Loc:           5
        should be:   5
Int_2_Loc:           13
        should be:   13
Int_3_Loc:           7
        should be:   7
Enum_Loc:            1
        should be:   1
Str_1_Loc:           DHRYSTONE PROGRAM, 1'ST STRING
        should be:   DHRYSTONE PROGRAM, 1'ST STRING
Str_2_Loc:           DHRYSTONE PROGRAM, 2'ND STRING
        should be:   DHRYSTONE PROGRAM, 2'ND STRING

Microseconds for one run through Dhrystone: 1.3
Dhrystones per Second:                      714285.6

which is 1.55 DMIPS/MHz at 262 MHz.  It's still a bit slower than our
current stuff, but I don't remember what was actually in the HiFive1 so
I'm not sure what we should be getting.  I verified the clock is
accurate with a stopwatch.  I haven't bothered to go look through the
binary, but I think we're about 10 cycles off so it should be managable.
</pre>
</div>
</content>
</entry>
<entry>
<title>Update SDK For E31/E51 Coreplex IP Evaluation</title>
<updated>2017-05-04T12:46:05+00:00</updated>
<author>
<name>Megan Wachs</name>
<email>megan@sifive.com</email>
</author>
<published>2017-05-04T12:46:05+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=4d5cbec9118cbedf2d4ae5b54acaa22862245a4c'/>
<id>4d5cbec9118cbedf2d4ae5b54acaa22862245a4c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Compile Dhrystone without RVC</title>
<updated>2017-01-04T02:53:37+00:00</updated>
<author>
<name>Andrew Waterman</name>
<email>andrew@sifive.com</email>
</author>
<published>2017-01-04T01:58:18+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=628d2b3559be5e9e651801d289a075d68df820e8'/>
<id>628d2b3559be5e9e651801d289a075d68df820e8</id>
<content type='text'>
Branch target misalignment reduces performance by about 10%.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Branch target misalignment reduces performance by about 10%.
</pre>
</div>
</content>
</entry>
<entry>
<title>Regularize timing code</title>
<updated>2017-01-04T02:53:28+00:00</updated>
<author>
<name>Andrew Waterman</name>
<email>andrew@sifive.com</email>
</author>
<published>2017-01-04T01:45:33+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=005b1a8f84ff743710ebd693b70d208da583098d'/>
<id>005b1a8f84ff743710ebd693b70d208da583098d</id>
<content type='text'>
Provide get_timer_value() and get_timer_freq() and use them.  On Arty,
they use mcycle and the known-fixed core frequency, whereas on HiFive1
they use mtime and the known-fixed mtime frequency.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Provide get_timer_value() and get_timer_freq() and use them.  On Arty,
they use mcycle and the known-fixed core frequency, whereas on HiFive1
they use mtime and the known-fixed mtime frequency.
</pre>
</div>
</content>
</entry>
<entry>
<title>Refactor libc stubs into libwrap</title>
<updated>2016-12-14T20:23:40+00:00</updated>
<author>
<name>Albert Ou</name>
<email>albert@sifive.com</email>
</author>
<published>2016-12-13T23:05:19+00:00</published>
<link rel='alternate' type='text/html' href='https://sillymon.ch/cgit/freedom-e-sdk/commit/?id=3dbaad0a1f27b96462541e1189efe37ffa913e9a'/>
<id>3dbaad0a1f27b96462541e1189efe37ffa913e9a</id>
<content type='text'>
The --wrap feature of GNU ld supports a cleaner framework for linking in
alternative implementations of libc functions without cpp hacks.
Place wrappers in separate object files to reduce static code size.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The --wrap feature of GNU ld supports a cleaner framework for linking in
alternative implementations of libc functions without cpp hacks.
Place wrappers in separate object files to reduce static code size.
</pre>
</div>
</content>
</entry>
</feed>
