Migrate aether post from 01524451814

This commit is contained in:
Jeff Epler 2019-07-06 17:23:33 -05:00
parent b5c7e31d13
commit b5dccece30

View file

@ -0,0 +1,190 @@
---
layout: default
title: Code size for bit reversing algorithms
redirect_from:
- /01524451814
---
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Code size for bit reversing algorithms</title>
<link rel="stylesheet" href="https://media.unpythonic.net/css/bootstrap.min.css">
<style>
#mask {
position: absolute;
left: 0;
top: 0;
background-color: #000;
opacity: 0.7;
display: none;
}
#loading {
position: fixed;
left: 50%;
top: 50%;
width: 58px;
height: 60px;
background-color: black;
background-image: url('https://media.unpythonic.net/img/loading.gif');
opacity: 0.9;
z-index: 20;
display: none;
border-radius: 4px;
}
#bigimg {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: none;
}
#maskouter {
height: 100%;
display: table;
margin: 0 auto;
}
#maskinner {
vertical-align: middle;
display: table-cell;
}
#imgleft, #imgright {
cursor: pointer;
position: fixed;
top: 50%;
width: 64px;
height: 64px;
border-radius: 4px;
background-color: black;
z-index: 22;
opacity: 0.7;
}
#imgleft {
left: 0;
background-image: url('https://media.unpythonic.net/img/prevbtn.png');
}
#imgleft.disabled, #imgright.disabled { display: none; }
#imgright {
right: 0;
background-image: url('https://media.unpythonic.net/img/nextbtn.png');
}
#imgdesc {
position: fixed;
left: 64px;
bottom: 0;
background-color: #333;
width: 100%;
padding-top: 1em;
padding-bottom: 1em;
padding-left: 2em;
border: 1px solid #555;
border-bottom: 0;
}
#imgdesc .filename {
color: #fff;
font-weight: bold;
}
#imgdesc .description {
color: #fff;
padding-left: 1em;
}
#mask { z-index: 10990; }
#loading { z-index: 10991; }
#bigimg { z-index: 10992; }
</style>
<script type="text/javascript" src="https://media.unpythonic.net/js/jquery-1.6.4.min.js"></script>
<script type="text/javascript" src="https://media.unpythonic.net/js/bootstrap-dropdown.js"></script>
<script type="text/javascript" src="https://media.unpythonic.net/js/jquery.mousewheel.js"></script>
<script type="text/javascript" src="https://media.unpythonic.net/js/jquery.ba-hashchange.min.js"></script>
<script type="text/javascript" src="https://media.unpythonic.net/js/jquery.mobile.custom.min.js"></script>
<script type="text/javascript" src="https://media.unpythonic.net/js/gallery.js"></script>
<style><!--
div.floatimageleft, div.floatimageright {
border: 1px solid black;
padding: 2px;
margin: 1em;
}
div.floatimageleft { clear: left; float: left; }
div.floatimageright { clear: right; float: right; }
div.floatimageleft img, div.floatimageright img { border: 0px; }
div.floatimageleft img.zoom, div.floatimageright img.zoom {
padding: 4px;
}
--></style>
<style><!--
div.albumouter {
margin-right: 1ex;
margin-top: 1ex;
vertical-align: baseline;
display: -moz-inline-box;
display: inline-block;
text-decoration: none !important;
}
.album { display: block; clear: both; }
.album a:link, .album a:hover, .album a:visited
{ text-decoration: none; }
.album a:hover { color: red; }
.albumimage {
display: block;
padding-left: 2px; padding-right: 2px;
padding-top: 3px; padding-bottom: 3px;
background: #ececec;
}
.albumimage img.zoom {
margin-left: 0px; margin-right: 0px;
padding-top: 4px; padding-right: 4px; }
.albumimage img { border: 0px;
display: block; margin-left: auto; margin-right:auto
}
--></style>
<!-- no summary found -->
</head>
<body>
I want to add support for &quot;LSB first&quot; to bitbang SPI in circuitpython. Probably the best way to do this is to optionally reverse the bits in each byte according to a flag setting.
<p>Code space is always at a premium, so I investigated several code fragments for bit reversal to find out which was smallest on arm and xtensa. These code fragments are gathered from the internet. The loop is the smallest alternative on both architectures, but the 16-element look up table is not much bigger (on arm, the difference is bigger on xtensa) and is probably faster.
<p>arm-none-eabi-gcc-7.2.1 -Os -mthumb
<pre>
text data bss dec hex filename
40 0 0 40 28 bitrev_loop.o
44 0 0 44 2c bitrev_lut16.o
44 0 0 44 2c bitrev_shifts1.o
44 0 0 44 2c bitrev_twiddle1.o
</pre>
<p>xtensa-lx106-elf-gcc-4.8.5 -Os
<pre>
text data bss dec hex filename
40 0 0 40 28 bitrev_loop.o
53 0 0 53 35 bitrev_lut16.o
57 0 0 57 39 bitrev_shifts1.o
52 0 0 52 34 bitrev_twiddle1.o
</pre>
<p><br><p><b>Files currently attached to this page:</b>
<table cellpadding=5 style="width:auto!important; clear:none!important"><col><col style="text-align: right"><tr bgcolor=#eeeeee><td><a href="https://media.unpythonic.net/emergent-files/01524451814/bitrev_loop.c">bitrev_loop.c</a></td><td>138 bytes</td></tr><tr bgcolor=#dddddd><td><a href="https://media.unpythonic.net/emergent-files/01524451814/bitrev_lut16.c">bitrev_lut16.c</a></td><td>281 bytes</td></tr><tr bgcolor=#eeeeee><td><a href="https://media.unpythonic.net/emergent-files/01524451814/bitrev_shifts1.c">bitrev_shifts1.c</a></td><td>193 bytes</td></tr><tr bgcolor=#dddddd><td><a href="https://media.unpythonic.net/emergent-files/01524451814/bitrev_twiddle1.c">bitrev_twiddle1.c</a></td><td>178 bytes</td></tr></table><p><br><br><font size=-2>Entry first conceived on 23 April 2018, 2:50 UTC, last modified on 6 July 2019, 21:49 UTC</font>
</body>
</html><!--Imported with do-aether-page on Sat Jul 6 17:23:33 CDT 2019-->