<!DOCTYPE html>

<title>Searchable RISC-V instruction set reference</title>

<div class="wrapper">
<input type="text" id="searchbox" placeholder="Search RISC-V Instructions"></input>
</div>

<details>
	<summary>Instruction format types</summary>

	<ul>
		<li>R - registers, <code>op rd, rs1, rs2</code>. 3 opcode
			parts, <code>opcode, funct7, funct3</code></li>

		<li>I - immediate, <code>op rd, rs1, imm[12]</code>. 2 opcode
			parts, <code>opcode, funct3</code>. Except on ECALL when
			it uses the immediate section for an opcode, called
			funct12</li>

		<li>S - store, <code>op, rs1, rs2+imm[12]</code>. 2 opcode
			parts, <code>opcode</code> and <code>funct3</code>.</li>

		<li>B - Variant of S type, probably means "branch". 2 opcode
			parts, <code>opcode</code> and <code>funct3</code>.</li>

		<li>U - upper load, <code>op rd, imm[20]</code>.  1 opcode
			part, <code>opcode</code>.</li>

		<li>J - Variant of J type, jump???. 1 opcode part, <code>opcode</code>.</li>

		<li>pseudo - Pseudo-instruction</li>
	</ul>
</details>

<div id="ilist">
</div>

<hr>

<p class="cite">
	The listings in this searchable RISC-V instruction set reference
	are generated from documentation written by <a href="https://hg.sr.ht/~icefox/riscv-reference">~icefox</a>
	on sourcehut. Website created by <a href="https://swisschili.sh">swissChili</a>.
</p>
<p class="cite">
	This documentation is incomplete for now. Check the ~icefox link
	for what is currently implemented.
</p>

<style>
 body {
	 font-family: sans-serif;
	 max-width: 50em;
	 margin: auto;
	 padding: 10px;
 }

 dt {
	 font-weight: bold;
 }

 dd div,
 #searchbox,
 code {
	 background: #fcfaf2;
	 padding: 4px;
	 border-radius: 4px;
	 border: 1px solid #f4f2e8;
 }

 code {
	 padding: 2px;
 }

 #searchbox {
	 font-size: 14pt;
	 padding: 12px 20px;
	 width: min-content;
 }

 .wrapper {
	 width: 100%;
	 display: flex;
	 justify-content: center;
	 margin-bottom: 4em;
	 margin-top: 2em;
 }

 .cite {
	 font-style: italic;
	 text-align: center;
 }

 hr {
	 border-color: #CCC;
 }

 details {
	 margin-bottom: 2em;
 }

 summary {
	 cursor: pointer;
 }
</style>

<script>
 function setup(instructions)
 {
	 console.log(instructions);

	 function handler()
	 {
		 let html = "";

		 console.log("searched");

		 let q = searchbox.value.toLowerCase();

		 console.log({q});

		 for (let item of instructions)
		 {
			 if (!item.mnemonic.toLowerCase().includes(q) &&
				 !item.name.toLowerCase().includes(q))
				 continue;

			 let desc = item.long_description.replace("\n\n", "</p><p>");

			 html += `
			 <dt>${item.mnemonic} - ${item.name}</dt>
			 <dd>
				 <div>encoding: ${item.encoding}, extension: ${item.extension}, opcode: ${item.opcode}</div>
				 <p>${desc}</p>
			 </dd>
			 `;
		 }

		 ilist.innerHTML = html;
	 };

	 searchbox.addEventListener("input", handler);
	 handler();
 }
 
 fetch("instructions.json")
	 .then(res => res.json())
	 .then(setup);
</script>
