@@ -354,7 +354,39 @@ class SymMemory_t {
354354 SymVal s7 = (it != memory.end ()) ? it->second : SVFactory::ZeroByte;
355355#endif
356356
357- return s7.concat (s6).concat (s5).concat (s4).concat (s3).concat (s2).concat (s1).concat (s0);
357+ return s7.concat (s6)
358+ .concat (s5)
359+ .concat (s4)
360+ .concat (s3)
361+ .concat (s2)
362+ .concat (s1)
363+ .concat (s0);
364+ }
365+
366+ SymVal loadSymFloat (int32_t base, int32_t offset) {
367+ // For simplicity, we treat float as concrete value for now
368+ auto symbv = loadSym (base, offset);
369+ assert (symbv.is_concrete () && " Currently only support concrete symbolic "
370+ " value for float-point values" );
371+ if (auto concrete = dynamic_cast <SymConcrete *>(symbv.symptr .get ())) {
372+ auto value = concrete->value ;
373+ return SVFactory::make_concrete_fp (value, 32 );
374+ } else {
375+ assert (false && " unreachable" );
376+ }
377+ }
378+
379+ SymVal loadSymDouble (int32_t base, int32_t offset) {
380+ // For simplicity, we treat double as concrete value for now
381+ auto symbv = loadSymLong (base, offset);
382+ assert (symbv.is_concrete () && " Currently only support concrete symbolic "
383+ " value for float-point values" );
384+ if (auto concrete = dynamic_cast <SymConcrete *>(symbv.symptr .get ())) {
385+ auto value = concrete->value ;
386+ return SVFactory::make_concrete_fp (value, 64 );
387+ } else {
388+ assert (false && " unreachable" );
389+ }
358390 }
359391
360392 // when loading a symval, we need to concat 4 symbolic values
@@ -396,6 +428,18 @@ class SymMemory_t {
396428 return std::monostate{};
397429 }
398430
431+ std::monostate storeSymFloat (int32_t base, int32_t offset, SymVal value) {
432+ assert (value.is_concrete () && " Currently only support concrete symbolic "
433+ " value for float-point values" );
434+ return storeSym (base, offset, value);
435+ }
436+
437+ std::monostate storeSymDouble (int32_t base, int32_t offset, SymVal value) {
438+ assert (value.is_concrete () && " Currently only support concrete symbolic "
439+ " value for float-point values" );
440+ return storeSymLong (base, offset, value);
441+ }
442+
399443 std::monostate storeSymByte (int32_t addr, SymVal value) {
400444 // assume the input value is 8-bit symbolic value
401445 bool exists;
0 commit comments