summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/plib/pfunction.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/plib/pfunction.h')
-rw-r--r--src/lib/netlist/plib/pfunction.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/lib/netlist/plib/pfunction.h b/src/lib/netlist/plib/pfunction.h
index 50e279cf034..58f47904b62 100644
--- a/src/lib/netlist/plib/pfunction.h
+++ b/src/lib/netlist/plib/pfunction.h
@@ -44,6 +44,7 @@ namespace plib {
};
public:
pfunction()
+ : m_lfsr(0xACE1u)
{
}
@@ -79,7 +80,18 @@ namespace plib {
void compile_postfix(const std::vector<pstring> &inputs,
const std::vector<pstring> &cmds, const pstring &expr);
+ double lfsr_random()
+ {
+ std::uint16_t lsb = m_lfsr & 1;
+ m_lfsr >>= 1;
+ if (lsb)
+ m_lfsr ^= 0xB400u; // taps 15, 13, 12, 10
+ return static_cast<double>(m_lfsr) / static_cast<double>(0xffffu);
+ }
+
std::vector<rpn_inst> m_precompiled; //!< precompiled expression
+
+ std::uint16_t m_lfsr; //!< lfsr used for generating random numbers
};